#!/bin/bash

ABORT="\033[31mAbort:\033[00m"
SUCCESS="\033[32mSuccess:\033[00m"
INFO="\033[33mInfo:\033[00m"
FAIL="\033[31mFail:\033[00m"
PASS="\033[32mPass:\033[00m"

BRANCH_NAME=$(git symbolic-ref -q --short HEAD)

ROOTDIR=$(pwd)

# Determine current platform
PLATFORM='unknown'
if [ "$(uname)" == "Darwin" ]; then
	PLATFORM='MacOS'
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
	PLATFORM='Linux'
elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then
	PLATFORM='Windows'
fi

function build {
	echo -e $INFO Building $1 \($2\)
	#cmake --build build/$2 --target $1 > /dev/null
	#output to commandline for debugging
	cmake --build build/$2 --target $1
	if [ $? -eq 0 ]
	then
		echo -e $PASS Building $1 \($2\) passed
	else
		echo -e $FAIL Building $1 \($2\) failed
		exit 1
	fi
}

function build_type {
	echo -e $INFO Starting with buildtype: $1
	if [ "$PLATFORM" == "Windows" ]
	then
		echo -e $INFO Building the Sourcetrail VS Solution
		cmake --build build/win32 --config $1
		if [ $? -ne 0 ]
		then
			echo -e $FAIL At least one build or test failed, no push to $branch
			exit 1
		fi
	else
		build Sourcetrail $1
		build Sourcetrail_test $1
		run_tests $1
	fi
}

function run_tests {
	echo -e $INFO Run $1 Tests

	cd bin/test
	echo $1/Sourcetrail_test
	../../build/$1/test/Sourcetrail_test
	if [ $? -eq 0 ]
	then
		echo -e $PASS $1 Tests passed
	else
		echo -e $FAIL $1 Tests failed
		exit 1
	fi
	cd $ROOTDIR
}

# testing before committing to a publish branch
if [[ ${BRANCH_NAME:0:9} == "_publish_"  ]]
then
	echo Try to publish
	echo Run builds and test
	echo This will take a while
	build_type Release
	echo -e $PASS All builds and tests passed
	exit 0
fi

if [ -z $BRANCH_NAME ]
then
	echo -e $ABORT "You are not on any branch."
	exit 1
fi

if [ $BRANCH_NAME == "master" ]
then
	echo -e $ABORT "Committing to master is prohibited."
	exit 1
fi

exit 0
