#!/bin/bash

function get_user {
	echo -e "\e[33mPlease enter username:\e[0m"
	read user
}

function get_port {
	echo -e "\e[33mPlease enter port:\e[0m"
	read port
}

function map_install_all {
	echo -e "\e[34mInstalling all maps\e[0m"
	for filename in $map_filelist
	do
		if ln -s /home/real_template/${filename} ${user_dir}/UrbanTerror/q3ut4 ; then
			echo -e "\e[34mFile linked: ${user_dir}/${filename}\e[0m" ; else
			echo -e "\e[31mFile link FAILED: ${user_dir}/${filename}\e[0m"
			exit
		fi
	done	
}

function map_install_yes {
	echo -e "\e[34mSelecting maps one by one\e[0m"
	for filename in $map_filelist
	do
		echo -e "\e[34mLink map: ${filename}  (y)es / (n)o\e[0m"
		read yeno
		if [ $yeno == "y" ] ; then
			if ln -s /home/real_template/${filename} ${user_dir}/UrbanTerror/q3ut4 ; then
				echo -e "\e[34mFile linked: ${user_dir}/${filename}\e[0m" ; else
				echo -e "\e[31mFile link FAILED: ${user_dir}/${filename}\e[0m"
				exit
			fi
		fi
	done	
}

function run_install {
	echo -e "\e[34mslackin's Urban Terror server install script!\e[0m"
	. used_ports
	if [ -z $user ] ; then
		get_user
	fi
	while [ -z $user_valid ]
	do
		echo -e "\e[34mChecking user directory.\e[0m"
		if [ -e "/home/${user}" ] ; then
			echo -e "\e[32mUser directory valid!\e[0m"
			user_valid="TRUE" 
			user_dir="/home/${user}" ; else
			echo -e "\e[31mUser directory invalid!\e[0m"
			get_user
		fi
	done
	while [ -z $port_valid ]
	do
		echo -e "\e[34mChecking port.\e[0m"
		if [[ $port -gt "1024" && $port -lt 65535 ]] ; then
			echo -e "\e[32mPort valid!\e[0m"
			port_taken="FALSE"
			for ports in $port_list
			do
				if [ "$ports" -eq "$port" ] ; then
					port_taken="TRUE"
				fi
			done 
			if [ $port_taken = "TRUE" ] ; then
				echo -e "\e[31mPort taken! Try another.\e[0m" 
				get_port ; else
				port_valid="TRUE"
			fi ; else
			echo -e "\e[31mPort invalid!\e[0m"
			get_port
		fi
	done
	port_list="${port_list} ${port}"
	echo "port_list=\"$port_list"\" 1> used_ports
	if mkdir ${user_dir}/UrbanTerror ; then
		echo -e "\e[32mDirectory created: ${user_dir}/UrbanTerror\e[0m" ; else
		echo -e "\e[31mDirectory failed to create: ${user_dir}/UrbanTerror\e[0m"
		exit
	fi
	if mkdir ${user_dir}/UrbanTerror/q3ut4 ; then
		echo -e "\e[32mDirectory created: ${user_dir}/UrbanTerror/q3ut4\e[0m" ; else
		echo -e "\e[31mDirectory failed to create: ${user_dir}/UrbanTerror/q3ut4\e[0m"
		exit
	fi
	. filelist
	for filename in $urt_filelist
	do
		if ln -s /home/real_template/${filename} ${user_dir}/UrbanTerror/ ; then
			echo -e "\e[32mFile linked: ${user_dir}/${filename}\e[0m" ; else
			echo -e "\e[31mFile link FAILED: ${user_dir}/${filename}\e[0m"
			exit
		fi
	done
	for filename in $q3ut4_filelist
	do
		if ln -s /home/real_template/${filename} ${user_dir}/UrbanTerror/q3ut4/ ; then
			echo -e "\e[32mFile linked: ${user_dir}/${filename}\e[0m" ; else
			echo -e "\e[31mFile link FAILED: ${user_dir}/${filename}\e[0m"
			exit
		fi
	done
	for filename in $cp_filelist
	do
		if cp /home/real_template/${filename} ${user_dir}/UrbanTerror/q3ut4/ ; then
			echo -e "\e[32mFile copied: ${user_dir}/${filename}\e[0m" ; else
			echo -e "\e[31mFile copy FAILED: ${user_dir}/${filename}\e[0m"
			exit
		fi
	done
	echo "#!/bin/bash" 1> ${user_dir}/start.sh
	echo "while true" 1>> ${user_dir}/start.sh
	echo "do" 1>> ${user_dir}/start.sh
	echo "${user_dir}/UrbanTerror/ioUrTded.x86_64 +set fs_game q3ut4 +set dedicated 2 +set net_port ${port} +set com_hunkmegs 256 +exec server.cfg" 1>> ${user_dir}/start.sh
	echo 'echo "server crashed on `date`" > last_crash.txt' 1>> ${user_dir}/start.sh
	echo "done" 1>> ${user_dir}/start.sh
	if chmod +x ${user_dir}/start.sh ; then
		echo -e "\e[32mStart script created successfully: ${user_dir}/start.sh\e[0m" ; else
		echo -e "\e[31mStart script failed to create: ${user_dir}/start.sh\e[0m"
		exit
	fi
	if chown -Rf ${user}:${user} ${user_dir}/UrbanTerror ; then
		echo -e "\e[32mOwnership changed to ${user}:${user}\e[0m" ; else
		echo -e "\e[31mProblem changing ownership to ${user}:${user} on directory: ${user_dir}/UrbanTerror"
		exit
	fi
	echo -e "\e[33mWould you like to install additional maps? (a)ll / (y)es / (n)o\e[0m"
	read inst_maps
	case "$inst_maps" in
		"a" )
			map_install_all $map_filelist $user_dir
			;;
		"y" )
			map_install_yes $map_filelist $user_dir
			;;
	esac
	echo -e "\e[33mInstall additional configs? (y)es / (n)o\e[0m"
	read cfg_inst
	if [ $cfg_inst == "y" ] ; then
		for filename in $cfg_filelist
		do
			echo -e "\e[33mCopy config: ${filename}  (y)es / (n)o\e[0m"
			read yeno
			if [ $yeno == "y" ] ; then
				if cp /home/real_template/${filename} ${user_dir}/UrbanTerror/q3ut4 ; then
					echo -e "\e[32mFile copied: ${user_dir}/${filename}\e[0m" ; else
					echo -e "\e[31mFile copy FAILED: ${user_dir}/${filename}\e[0m"
					exit
				fi
			fi
		done
		echo -e "\e[33mInstall pugbot configs?  (y)es / (n)o\e[0m"
		read pug_inst
		if [ $pug_inst == "y" ] ; then
			for filename in $pugcfg_filelist
			do
				if cp /home/real_template/${filename} ${user_dir}/UrbanTerror/q3ut4 ; then
					echo -e "\e[32mFile copied: ${user_dir}/${filename}\e[0m" ; else
					echo -e "\e[31mFile copy FAILED: ${user_dir}/${filename}\e[0m"
					exit
				fi
			done
		fi
	fi
}

user=$1
port=$2

run_install $user $port
