#!/bin/bash

output=/dev/stdout

# displays help text
function displayHelp {
  cat << HelpText
Usage: compile.sh [OPTION]...

Options:
  -d, --dry      Do not compile
  -g, --git      Add hash of HEAD to filename
  -h, --help     Show this help text
  -j, --java     Run sanityCheck based on java
  -p, --python   Run sanityCheck based on python
  -q, --quiet    Suppress terminal output
HelpText
}

#display an error message
function echoError {
	echo -e "\033[0;31m$@\033[0m"
}

#display message
function echoMessage {
	echo "$1" > "${output}"
}

#compile the HTML file
function compile {

	mkdir -p bin

	export TWEEGO_PATH=devTools/tweeGo/storyFormats
	TWEEGO_EXE="tweego"

	if hash $TWEEGO_EXE 2>/dev/null; then
		echoMessage "system tweego binary"
	else
		case "$(uname -m)" in
		x86_64|amd64)
			echoMessage "x64 arch"
			if [ "$(uname -s)" = "Darwin" ]; then
				TWEEGO_EXE="./devTools/tweeGo/tweego_osx64"
			else
				TWEEGO_EXE="./devTools/tweeGo/tweego_nix64"
			fi
			;;
		x86|i[3-6]86)
			echoMessage "x86 arch"
			if [ "$(uname -s)" = "Darwin" ]; then
				TWEEGO_EXE="./devTools/tweeGo/tweego_osx86"
			else
				TWEEGO_EXE="./devTools/tweeGo/tweego_nix86"
			fi
			;;
		*)
			echoError "No system tweego binary found, and no precompiled binary for your platform available."
			echoError "Please compile tweego and put the executable in PATH."
			exit 2
		esac
	fi

	if [[ "$usehash" ]]; then
		HASH="$(git rev-list -n 1 --abbrev-commit HEAD)"

		$TWEEGO_EXE -o "bin/FC_pregmod_${HASH}_tmp.html" src/ --head devTools/head.html || build_failed="true"

		if [ "$build_failed" = "true" ]
		then
			echoError "Build failed."
			exit 1
		fi

		#Make the output prettier, replacing \t with a tab and \n with a newline
		sed -i -e '/^<div id="store-area".*$/s/\\t/\t/g' -e '/^<div id="store-area".*$/s/\\n/\n/g'  "bin/FC_pregmod_${HASH}_tmp.html" \
			&& mv "bin/FC_pregmod_${HASH}_tmp.html" "bin/FC_pregmod_${HASH}.html"

		ln -s ../resources bin/ 2> /dev/null

		echoMessage "Saved to bin/FC_pregmod_$HASH.html."

	else
		# Find and insert current commit
		COMMIT=$(git rev-parse --short HEAD)
		sed -Ei "s/build .releaseID/\0 commit $COMMIT/" src/gui/mainMenu/AlphaDisclaimer.tw

		$TWEEGO_EXE -o "bin/FC_pregmod_tmp.html" src/ --head devTools/head.html || build_failed="true"

		# Revert AlphaDisclaimer for next compilation
		git checkout -- src/gui/mainMenu/AlphaDisclaimer.tw

		if [ "$build_failed" = "true" ]
		then
			echoError "Build failed."
			exit 1
		fi

		#Make the output prettier, replacing \t with a tab and \n with a newline
		sed -i -e '/^.*<div id="store-area".*$/s/\\t/\t/g' -e '/^.*<div id="store-area".*$/s/\\n/\n/g' bin/FC_pregmod_tmp.html \
			&& mv bin/FC_pregmod_tmp.html bin/FC_pregmod.html

		ln -s ../resources bin/ 2> /dev/null

		echoMessage "Saved to bin/FC_pregmod.html."
	fi
}

if [[ "$1" == "" ]]; then
	#tip if no option
	echoMessage "For more options see compile.sh -h."
else
	#parse options
	while [[ "$1" ]]
	do
		case $1 in
		-d|--dry)
			dry="true"
		;;
		-g|--git)
			usehash="true"
		;;
		-h|--help)
			displayHelp
			exit 0
		;;
		-j|--java)
			java="true"
		;;
		-p|--python)
			python="true"
		;;
		-q|--quiet)
			output=/dev/null
		;;
		*)
			echoError "Unknown argument $1."
			displayHelp
			exit 1
		esac
		shift
	done
fi

# Run sanity check.
[ -n "$java" ] && ./sanityCheck.sh java

[ -n "$python" ] && ./sanityCheck.sh

#compile
if [[ "$dry" ]]; then
	echoMessage "Dry run finished."
else
	compile
	echoMessage "Compilation finished."
fi
