#!/bin/sh
set -e

unset SKIP_FOOTER
unset SKIP_HEADER
unset SKIP_LIST
unset VERBOSE
unset PRINT_HELP

usage() {
	printf "Usage: rivet [-o destdir] [-hovelf] srcdir\n"
	printf "\t-h: prints this message\n"
	printf "\t-o [destdir]: specifies the output direcotory to be [destdir]\n"
	printf "\t-v: makes the script verbose\n"
	printf "\t-e: skips prepending _header.html to .html files\n"
	printf "\t-f: skips appending _footer.html to .html files\n"
	printf "\t-l: skips the generation of .html file list\n"
	exit 2
}

apply_header() {
	tmpfile="tmpheadfile.tmp"
	cp "$1" "$tmpfile"
	sed "/<head>/r $headerfile" "$tmpfile" > "$1"
	rm -f "$tmpfile"
}

apply_footer() {
	tmpfoot="tmpfooter.tmp"
	tmpfile="tmpfootfile.tmp"
	cp "$footerfile" "$tmpfoot"
	sed -i '1s/^/<footer> /' "$tmpfoot"
	echo '</footer>' >> "$tmpfoot"
	cp "$1" "$tmpfile"
	sed "/<\/body/r $tmpfoot" "$tmpfile" > "$1"
	rm -f "$tmpfile" "$tmpfoot"
}

convert() {
	tmpfile="tmpconvfile.tmp"
	infile="$1"
	outfile="${infile%???}.html"
	cp "$1" "$tmpfile"
	# TODO: convert links to .md to .html
	lowdown -s -Thtml -o "$outfile" "$tmpfile"
	rm -f "$tmpfile" "$1"
}

# Check dependencies
if ! command -v lowdown > /dev/null; then
    echo "lowdown is not installed"
    exit
fi

destdir='dst'
# Get arguments using getopts
# rivet [src] [-vhelf] [-o dir]
# -o  [dir]: set the destination directory, defaults to "dst"
# -v: verbose, sets x so it prints every line
# -h: prints usage
# -e: skip prepend header
# -l: skip article list
# -f: skip append footer
while getopts 'o:vhelf' c
do
	case "$c" in
		o) destdir=$OPTARG ;;
		v) VERBOSE=true ;;
		h) PRINT_HELP=true ;;
		e) SKIP_HEADER=true ;;
		l) SKIP_LIST=true ;;
		f) SKIP_FOOTER=true ;;
		*) ;;
	esac
done
shift $((OPTIND - 1))
srcdir="$(basename "$1")"
headerfile=$srcdir/_header.html
footerfile=$srcdir/_footer.html


if [ "$PRINT_HELP" ]; then
	usage
fi
if [ "$VERBOSE" ]; then
	set -x
fi

if ! [ -d "$srcdir" ]; then
	echo "Error: missing source direcotry"
	usage
fi

mkdir -p "$destdir"
cp -r "$srcdir"/* "$destdir"
rm -f "$destdir"/_header.html "$destdir"/_footer.html

# Convert markdown files
find "$destdir" -name "*.md" |
while IFS="" read -r file; do
	convert "$file"
done

# Prepend header
if ! [ "$SKIP_HEADER" ]; then
	find "$destdir" -name "*.html" |
	while IFS="" read -r file; do
		apply_header "$file"
	done
fi
# Append footer
if ! [ "$SKIP_FOOTER" ]; then
	find "$destdir" -name "*.html" |
	while IFS="" read -r file; do
		apply_footer "$file"
	done
fi

exit
