#!/bin/bash

WORKDIR="$(dirname "$(readlink -f "$0")")"
SCREEN_SOCKNAME="instantchat_server"
SERVER_BIN="./server/chatserver.py"

print_usage() {
	echo "usage: $0 start|stop|restart|status|attach|pull"
}

if [ $# -ne 1 ]; then
	print_usage
	exit 1
fi

cd "$WORKDIR"

server_status() {
	echo "Server status (screen -ls):"
	if screen -ls | grep $SCREEN_SOCKNAME; then
		echo "Server running"
	else
		echo "Server not running"
	fi
}

server_start() {
	if screen -ls | grep -q $SCREEN_SOCKNAME; then
		echo "Server is already running!"
		return 1
	else
		echo "Starting server..."
		screen -dmS $SCREEN_SOCKNAME -L bash -c "$SERVER_BIN || read -p '-- press key to end screen session --'"
	fi
}

server_stop() {
	if screen -ls | grep -q $SCREEN_SOCKNAME; then
		echo "Stopping server..."
		kill $(screen -ls | grep $SCREEN_SOCKNAME | grep -o '[0-9]*')
	else
		echo "Server is not running!"
	fi
}

server_restart() {
	server_stop
	server_start
}

server_attach() {
	echo "Attaching to screen session..."
	screen -r $SCREEN_SOCKNAME
}

server_pull() {
	echo "Pulling from repository..."
	if git pull --ff-only; then
		server_restart
	else
		echo "Error while pulling!"
		exit 1
	fi
}

COMMAND=$1

case $COMMAND in
	start)   server_start   ;;
	stop)    server_stop    ;;
	restart) server_restart ;;
	status)  server_status  ;;
	attach)  server_attach  ;;
	pull)    server_pull    ;;

	*)
		echo "unknown command"
		print_usage
		exit 1
esac

