#!/bin/sh
TEMPLATE="templates/default.html"
STATIC_DIRS="style img"
TMP_FILE=".tmp"
SRC="src"
OUT="out"
#BASE_URL=""
. ./bin/ssg-template
_log() {
	echo [${0}] "$@"
}
_to_html() {
	# 1: filename
	# stdout: content
	lowdown --html-no-skiphtml --html-no-escapehtml "${1}"
}
_install() {
	# 1: filename
	install -D "${TMP_FILE}" $(_get_out_path "${1}")
}
_template_heredoc() {
	echo ". ${PWD}/bin/ssg-template" > "tmp/heredoc"
	echo "cat <> "tmp/heredoc"
	cat "${1}" >> "tmp/heredoc"
	echo EOF_TEMPLATE >> "tmp/heredoc"
	sh "tmp/heredoc" "${1}" > "${TMP_FILE}"
	_to_html "${TMP_FILE}" > "${2}"
}
_convert_urls() {
	# file url
	if ! echo "${2}" | grep "^http" >/dev/null; then
		sed -i "s@href=/@href=$2/@g" "${1}"
	fi
	sed -i "s@]* href=\"[/^\"]*/@]* href=\"[/^\"]*/@]* src=\"[/^\"]*/@ ${template}"
		_to_html "templates/${template}.md" > "${TMP_FILE}"
		install -D "${TMP_FILE}" "tmp/${template}.html"
	done
	# markdown files
	for file in $(find "${SRC}" -iname "*.md"); do
		out_path=$(_get_out_path "${file}")
		if [ "${file}" -ot "${out_path}" ]; then
			_log "! ${file}"
			continue
		fi
		_log "> ${file}"
		# Metadata
		_cleanup_tmp_file "tmp/metadata.html"
		_render_metadata "${file}" > "tmp/metadata.html"
		# Table of content
		_cleanup_tmp_file "tmp/toc.html"
		if [ $(_get_value "${file}" "toc") ]; then
			_render_toc "${file}" > "tmp/toc.html"
		fi
		# Index of directory
		_cleanup_tmp_file "tmp/index.html"
		if [ $(_get_value "${file}" "index") ]; then
			_render_index "${file}" > "tmp/index.html"
		fi
		# Render body content
		_to_html "${file}" > "tmp/body.html"
		# Erase body content with templating
		if basename "${file}" | grep "^_"; then
			_template_heredoc "${file}" "tmp/body.html"
		fi
		# Concatenate temporary files to final page
		m4 templates/default.html > "${TMP_FILE}"
		install -D "${TMP_FILE}" "${out_path}"
	done
	# html files
	for file in $(find "${SRC}" -iname "*.html"); do
		_log "> ${file}"
		_install "${file}"
	done
	# convert urls
	for file in $(find "${OUT}" -iname "*.html"); do
		_convert_urls "${file}" "${BASE_URL}"
	done
	for dir in ${STATIC_DIRS}; do
		_log "> ${dir}/"
		cp -R "src/${dir}" "out/${dir}"
	done
}
main
 ${template}"
		_to_html "templates/${template}.md" > "${TMP_FILE}"
		install -D "${TMP_FILE}" "tmp/${template}.html"
	done
	# markdown files
	for file in $(find "${SRC}" -iname "*.md"); do
		out_path=$(_get_out_path "${file}")
		if [ "${file}" -ot "${out_path}" ]; then
			_log "! ${file}"
			continue
		fi
		_log "> ${file}"
		# Metadata
		_cleanup_tmp_file "tmp/metadata.html"
		_render_metadata "${file}" > "tmp/metadata.html"
		# Table of content
		_cleanup_tmp_file "tmp/toc.html"
		if [ $(_get_value "${file}" "toc") ]; then
			_render_toc "${file}" > "tmp/toc.html"
		fi
		# Index of directory
		_cleanup_tmp_file "tmp/index.html"
		if [ $(_get_value "${file}" "index") ]; then
			_render_index "${file}" > "tmp/index.html"
		fi
		# Render body content
		_to_html "${file}" > "tmp/body.html"
		# Erase body content with templating
		if basename "${file}" | grep "^_"; then
			_template_heredoc "${file}" "tmp/body.html"
		fi
		# Concatenate temporary files to final page
		m4 templates/default.html > "${TMP_FILE}"
		install -D "${TMP_FILE}" "${out_path}"
	done
	# html files
	for file in $(find "${SRC}" -iname "*.html"); do
		_log "> ${file}"
		_install "${file}"
	done
	# convert urls
	for file in $(find "${OUT}" -iname "*.html"); do
		_convert_urls "${file}" "${BASE_URL}"
	done
	for dir in ${STATIC_DIRS}; do
		_log "> ${dir}/"
		cp -R "src/${dir}" "out/${dir}"
	done
}
main