#!/bin/bash

if [ ! -z .env ];then
	# no env means we have to use the neocities var
	export KEY=$NEOCITIES_KEY
else
	source .env
fi

url="https://neocities.org"
site=.mirror
auth="Authorization: Bearer $KEY"


_upload_html() {
	# fix this comparison cuz its busted
	if [ ${1:0:1} = "" ];then
		echo Path must start with ./
		exit 1
	fi
	for f in $@;do
		remote_path=${f:1}
		echo curl -s -o /dev/null -w '%{http_code}' -H "auth" -F "$remote_path=@$f" $url/api/upload
		curl -s -o /dev/null -w '%{http_code}' -H "$auth" -F "$remote_path=@$f" $url/api/upload
	done
}

_upload_media() {
	[[ "${1:0:1}" == "./" ]] && \
		echo 'Path must start with ./' && \
		exit 1

	for f in $@;do
		remote_path=${f:1}
		echo curl -s -o /dev/null -w '%{http_code}' -H "auth" -F "$remote_path=@$f" $url/api/upload
		curl -s -o /dev/null -w '%{http_code}' -H "$auth" -F "$remote_path=@$f" $url/api/upload
	done
}

_upload_all_media() {
	for file in $(find media -type f);do
		echo Uploading media: $file
		curl -H "$auth" -F "$file=@$file" $url/api/upload -s > /dev/null
	done
}

html() {
	# Total reupload of the site's html
	_upload_html $(find -name '*.html')
}

roots() {
	_upload_html ./*.html
}

folder() {
	if [ -z $1];then
		echo No folder specified > /dev/stderr
	else
		pushd $1 > /dev/null
		_upload_html ./*.html
		popd > /dev/null
	fi
}

_help() {
cat <<EOF 
PATHS:
	Use a fake relative path as if we were in "$site"
	Example: gensite -m ./media/img/some-post/image.jpg ...
Options:
	h => Reuploads all the html content
	r => Uploads all root html pages
	f [FOLDER] => Upload all html in [FOLDER]
	s [PATH] => Upload single html page with mirrord path
	m [PATH] => Upload any amount of media files
	M => Upload all available media
EOF
}

if [ -z $1 ];then
	_help
else 
	pushd $site > /dev/null
	while getopts 'a::Hhrf:s:m:M' opt;do
		case $opt in
			H) _help;;
			h) _upload_html $(find -name '*.html');; # Upload all html content
			r) _upload_html ./*.html;; # Upload all root html pages
			f) _upload_html $2/*.html;;# Upload html in the spec'd folder
			s) _upload_html $2;;# upload single html page
			m) _upload_media $2;;# upload raw file
			M) _upload_all_media;;
		esac
	done
	popd > /dev/null
fi

