#!/usr/bin/env bash

# This file is responsible for generating an html structure of documents
# All md files will be converted to html
# Everything else will be copied exactly

# The table of contents will be a nested ul structure
# The top level will be the tags, under each tag there will be a list of documents that are tagged with that tag
# This will result in doucuments being listed multiple times, once for each tag they are in
generate-html-toc(){
	echo "<nav><ul>"
	# Loop through each tag
	listTags --noheader | while read item; do
		local tag="$(echo "$item" | awk -F '  +' '{print $1}')"
		local count="$(echo "$item" | awk -F '  +' '{print $2}')"
		echo "<li>"
		echo "$tag ($count)"
		echo "<ul>"
		echo "SELECT items.filename,items.title
		FROM items LEFT JOIN links ON items.id = links.itemID
		LEFT JOIN tags ON links.tagID = tags.id
		WHERE tags.name = '$(safeSQL "$tag")'
		GROUP BY items.id;" |
			sqlite3 "${sqliteFile}" |
			awk -F '|' '{sub(/\.md/,".html",$1);print "<li><a href=\"" $1 "\">" $2 "</a></li>"}'
		echo "</ul>"
		echo "</li>"
	done
	echo "</ul></nav>"
}

to-html(){
	local destination="$1"
	local preTemplate="/usr/local/share/kb/templates/main.html"
	local tocFile="$(mktemp)"
	local templateFile="$(mktemp)"
	generate-html-toc > "$tocFile"

	# If there is a template in the users .local/share directory, use that
	[ -e "${XDG_CONFIG_HOME:-$HOME/.config}/kb/templates/main.html" ] &&
		preTemplate="${XDG_CONFIG_HOME:-$HOME/.config}/kb/templates/main.html"

	# If there is a template in the data directory, use that
	[ -e "${dataDir}templates/main.html" ] &&
		preTemplate="${dataDir}templates/main.html"


	sed "s#\#TOC\##\${ $tocFile() }#" "$preTemplate" > "$templateFile"


	find "$dataDir" -name "*.md" | while read file; do
		local newFile="${file##*/}"
		newFile="${newFile/.md/.html}"
		sed -E 's/\.md( *)\)/.html\1\)/' "$file" |
		pandoc --quiet -f markdown -t html --template "$templateFile" > "$destination/$newFile"
	done

	rsync -a \
		--exclude "*.md" --exclude ".git" --exclude "*.sqlite3" \
		"$dataDir/" "$destination"

	rm "$tocFile" "$templateFile"

}