#!/bin/sh

DAEMON='teamviewer-iot-agent'

PACKAGE_NAME=$SYNOPKG_PKGNAME

PACKAGE_DIR="/var/packages/${PACKAGE_NAME}"
PACKAGE_TARGET="${PACKAGE_DIR}/target"

LOCKFILE="${PACKAGE_TARGET}/run/${DAEMON}.pid"
LOGFILE=$PACKAGE_TARGET/logfiles/${DAEMON}_logfile.log

STATUS_RUNNING=0
STATUS_DEAD=1
STATUS_DEAD_BUT_LOCK_EXISTS=2
STATUS_NOT_RUNNING=3
STATUS_UNKNOWN=4
STATUS_BROKEN=150

function DeleteCoreFiles() {
	local volume="$(grep --perl-regexp '/volume\d+' --only-matching /proc/sys/kernel/core_pattern)"
	[ -e "${volume}/@teamviewer-iot-.core.gz" ] && rm "${volume}/@teamviewer-iot-.core.gz"
	[ -e "${volume}/@tvLaunch.core.gz" ] && rm "${volume}/@tvLaunch.core.gz"
}

function DeleteOldInfoFile() {
	rm -f "${PACKAGE_TARGET}/tv_ui/info"
}

function GetStatus() {

	[ -e $LOCKFILE ] || return $STATUS_NOT_RUNNING

	local LOCKPID="$(cat $LOCKFILE)"

	[ -n "$LOCKPID" ] || return $STATUS_DEAD

	if (( $(/usr/bin/ps aux | grep $DAEMON | grep $LOCKPID | wc -l) == 1 )) ; then
		return $STATUS_RUNNING
	else
		return $STATUS_DEAD
	fi
}

function StopDaemon() {
	GetStatus
	if [ $? -ne 0 ] ; then
		return 0
	fi

	# find PID of daemon
	local LOCKPID=
	[ -e $LOCKFILE ] && LOCKPID="$(cat $LOCKFILE)"
	if [ ! "(" -n "$LOCKPID"  -a  "$LOCKPID" -gt 1 ")" ] ; then
		# Could not find valid PID after daemon was found to be running before
		return 0
	fi

	# send SIGTERM to daemon
	/usr/bin/kill -TERM ${LOCKPID} > /dev/null 2>&1

	# wait for daemon to shut down
	for i in {1..10}
		do
			sleep 1
			GetStatus
			if [ $? -ne 0 ] ; then
				# echo "Daemon stopped after $i seconds" > $SYNOPKG_TEMP_LOGFILE
				return 0
			fi
		done

	# kill daemon if shutdown not successful
	/usr/bin/kill -KILL ${LOCKPID} > /dev/null 2>&1
	return 0
}

DeleteCoreFiles
DeleteOldInfoFile

case $1 in
	start)
		StopDaemon

		${PACKAGE_TARGET}/tv_bin/${DAEMON} --storage-prefix ${PACKAGE_TARGET} &
		chmod +x ${PACKAGE_TARGET}/tv_bin/script/teamviewer
		chmod -x ${PACKAGE_TARGET}/tv_bin/script/tvw_main

		#try 10 times with 1 second sleep in between
		for i in {1..10}
		do
			GetStatus
			if [ $? -eq 0 ] ; then
				echo "Started TeamViewer v3.7.4-6005" > $SYNOPKG_TEMP_LOGFILE
				exit $STATUS_RUNNING
			else
				sleep 1
			fi
		done

		#Something went wrong. Most likely
		DeleteCoreFiles
		echo "Error in starting TeamViewer v3.7.4-6005" > $SYNOPKG_TEMP_LOGFILE
		exit $STATUS_BROKEN
		;;

	stop)
		StopDaemon
		echo "Stopped TeamViewer v3.7.4-6005" > $SYNOPKG_TEMP_LOGFILE

		DeleteCoreFiles

		exit 0
		;;

	status)
		GetStatus
		exit $?
		;;
	log)
		[ -e "$LOGFILE" ] && echo "$LOGFILE"
		exit 0
		;;
esac

exit 1
