#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
OUTPUT_DIR="$2"
DEFAULT_CFG_FILE=UnrealTournament.ini
CFG_FILE="${3:-$DEFAULT_CFG_FILE}"

function add_iniKeyEx() {
	crudini --set $OUTPUT_DIR/System/$1 $2 __$3 $4
	# Warning: ugly hack with sed to allow multiple key instances + to remove space around '='
	sed -i "s/[[:space:]]*__$(echo $3 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')[[:space:]]*=[[:space:]]*/$(echo $3 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')=/g" 	$OUTPUT_DIR/System/$1
}
# !!Warning!! section is not considered
function del_iniKeyEx() {
	sed -i "/[[:space:]]*$(echo $3 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')[[:space:]]*=[[:space:]]*$(echo $4 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')/d" $OUTPUT_DIR/System/$1
}
function add_iniKey() {
	add_iniKeyEx $CFG_FILE $1 $2 $3
}
# !!Warning!! section is not considered
function del_iniKey() {
	del_iniKeyEx $CFG_FILE $1 $2 $3
}
function add_ServerPackage() {
	add_iniKey 'Engine.GameEngine' ServerPackages $1
	add_iniKey 'XC_Engine.XC_GameEngine' ServerPackages $1
}
function del_ServerPackage() {
	del_iniKey 'Engine.GameEngine' ServerPackages $1
	del_iniKey 'XC_Engine.XC_GameEngine' ServerPackages $1
}
function add_ServerActors() {
	add_iniKey 'Engine.GameEngine' ServerActors $1
	add_iniKey 'XC_Engine.XC_GameEngine' ServerActors $1
}
function del_ServerActors() {
	del_iniKey 'Engine.GameEngine' ServerActors $1
	del_iniKey 'XC_Engine.XC_GameEngine' ServerActors $1
}
function getmodprefix() {
	UNUFile=$(find $OUTPUT_DIR/System -type f -name "fnn*.u" -exec basename {} \;)
	FNNBaseName="${UNUFile%.*}"
	echo "$FNNBaseName"
}
function install() {
	rsync -a  $SCRIPT_DIR/Help/		$OUTPUT_DIR/Help  --exclude  '.git'
	rsync -a  $SCRIPT_DIR/System/ 	$OUTPUT_DIR/System  --exclude  '.git'
	
	echo install ok
}
function enable() {
	FNNBaseName="$(getmodprefix)"
	VAUFile=$(find $OUTPUT_DIR/System -type f -name "VAH*.u" -exec basename {} \;)
	VABaseName="${VAUFile%.*}"
	BP1UFile=$(find $OUTPUT_DIR/System -type f -name "BP1H*.u" -exec basename {} \;)
	BP1BaseName="${BP1UFile%.*}"
	BP4UFile=$(find $OUTPUT_DIR/System -type f -name "BP4H*.u" -exec basename {} \;)
	BP4BaseName="${BP4UFile%.*}"
	add_ServerPackage $FNNBaseName
	add_ServerActors  $FNNBaseName.NewNetServer
	add_ServerPackage $BP1BaseName
	add_ServerPackage $BP4BaseName
	add_ServerPackage $VABaseName
	
	echo enable ok
}
function disable() {
	FNNBaseName="$(getmodprefix)"
	VAUFile=$(find $OUTPUT_DIR/System -type f -name "VAH*.u" -exec basename {} \;)
	VABaseName="${VAUFile%.*}"
	BP1UFile=$(find $OUTPUT_DIR/System -type f -name "BP1H*.u" -exec basename {} \;)
	BP1BaseName="${BP1UFile%.*}"
	BP4UFile=$(find $OUTPUT_DIR/System -type f -name "BP4H*.u" -exec basename {} \;)
	BP4BaseName="${BP4UFile%.*}"
	
	del_ServerPackage $FNNBaseName
	del_ServerActors  $FNNBaseName.NewNetServer
	del_ServerPackage $BP1BaseName
	del_ServerPackage $BP4BaseName
	del_ServerPackage $VABaseName
	echo disable ok
}
function show_help() {
	echo
	echo "Usage: $0 { getmodprefix |install | enable | disable } <UT99_INSTALL_DIR> [<UT99_CONFIG_FILE>]"
	echo
}
function check_cfg_file() {
	if [ -z ${CFG_FILE} ]
	then
		echo "CFG_FILE is unset, setting it to $DEFAULT_CFG_FILE"
		CFG_FILE=$DEFAULT_CFG_FILE
	else
		echo "CFG_FILE is set to '$CFG_FILE'"
	fi
	if [ ! -f $OUTPUT_DIR/System/$CFG_FILE ]
	then
		echo "$OUTPUT_DIR/System/$CFG_FILE does not exist"
		show_help
		exit 9999 # die with error code 9999
	fi
}
function check_game_dir() {
	### Check if a directory does not exist ###
	if [ -z $OUTPUT_DIR ]
	then
		echo "incorrect <UT99_INSTALL_DIR>"
		show_help
		exit 9999 # die with error code 9999
	fi
}
case "$1" in
	'getmodprefix')
			check_game_dir
			getmodprefix
			;;
	'install')
			check_game_dir
			install
			;;
	'enable')
			check_game_dir
			check_cfg_file
			disable
			enable
			;;
	'disable')
			check_game_dir
			check_cfg_file
			disable
			;;
	*)
			show_help
			exit 1
			;;
esac
exit 0