#!/bin/sh
#This Source Code Form is subject to the terms of the Mozilla
#Public License, v. 2.0. If a copy of the MPL was not distributed
#with this file, You can obtain one at http://mozilla.org/MPL/2.0/.


RETVAL=0
PATH_DWA="@PATH_DWA@"
PATH_DWA_NATIVE="$PATH_DWA/native"
PATH_DWA_RUNTIME="$PATH_DWA/runtime/bin"
PATH_DWA_RUNTIME_LIBRARY="$PATH_DWA/runtime/lib"
INST_VER=0
if [ -f "${PATH_DWA_NATIVE}/installer.ver" ]; then
	INST_VER=$(cat "${PATH_DWA_NATIVE}/installer.ver")
fi

check_macos_version() {
    current_version=$(sw_vers -productVersion)
    v1=(${current_version//./ })
    v2=(${1//./ })
    for ((i=0; i<3; i++)); do
        num1=${v1[i]:-0}
        num2=${v2[i]:-0}
        if ((num1 > num2)); then
            return 0
        elif ((num1 < num2)); then
            return 1
        fi
    done
    return 0
}

rem_file() {
	if [ -f $1 ]; then
		rm -f $1
	fi
}

run() {
	echo $$ > "${PATH_DWA}/dwagent.pid"
	. "${PATH_DWA_NATIVE}/dwagupd"
	if check_update "${PATH_DWA}"; then
		cd "${PATH_DWA}"
		#BIGSUR FIX		
		if [ -f "${PATH_DWA_RUNTIME_LIBRARY}/libz.1.dylib" ]; then
			unlink "${PATH_DWA_RUNTIME_LIBRARY}/libz.1.dylib"
		fi
		export DYLD_LIBRARY_PATH=${PATH_DWA_RUNTIME_LIBRARY}
        "${PATH_DWA_RUNTIME}/@EXE_NAME@" agent.py -filelog -noctrlfile
	fi
	rem_file "${PATH_DWA}/dwagent.pid"
}

install() {
	ln -s "${PATH_DWA_NATIVE}/dwagsvc.plist" /Library/LaunchDaemons/@LDNAME_SERVICE@.plist
	if [ $? -eq 0 ]; then
		echo "Installed"
	else
		echo "Error: Create symbolic link service."
		RETVAL=12
	fi

	ln -s "${PATH_DWA_NATIVE}/dwaglac.plist" /Library/LaunchAgents/@LDNAME_LAC@.plist
	if [ $? -eq 0 ]; then
		echo "Installed"
	else
		echo "Error: Create symbolic link lac."
		RETVAL=12
	fi
	if check_macos_version "10.11"; then
		for USER in `users`; do launchctl bootstrap gui/`id -u $USER` /Library/LaunchAgents/@LDNAME_LAC@.plist > /dev/null 2>&1; done
		for USER in `users`; do launchctl start gui/`id -u $USER`/@LDNAME_LAC@ > /dev/null 2>&1; done
	else
		for USER in `users`; do sudo -u $USER launchctl load -F -S Aqua /Library/LaunchAgents/@LDNAME_LAC@.plist > /dev/null 2>&1; done
		for USER in `users`; do sudo -u $USER launchctl load -F -S LoginWindow /Library/LaunchAgents/@LDNAME_LAC@.plist > /dev/null 2>&1; done
	fi	
}

delete() {
	if [ -f "/Library/LaunchDaemons/@LDNAME_SERVICE@.plist" ]; then		
		rm -f /Library/LaunchDaemons/@LDNAME_SERVICE@.plist
		if [ $? -eq 0 ]; then
			echo "Deleted"
		else 
			echo "Error: Remove symbolic link."
			RETVAL=12
		fi
	fi
	
	if [ -f "/Library/LaunchAgents/@LDNAME_LAC@.plist" ]; then
		if check_macos_version "10.11"; then
			for USER in `users`; do launchctl bootout gui/`id -u $USER` /Library/LaunchAgents/@LDNAME_LAC@.plist > /dev/null 2>&1; done
		else
			for USER in `users`; do sudo -u $USER launchctl unload -F -S Aqua /Library/LaunchAgents/@LDNAME_LAC@.plist > /dev/null 2>&1; done
			for USER in `users`; do sudo -u $USER launchctl unload -F -S LoginWindow /Library/LaunchAgents/@LDNAME_LAC@.plist > /dev/null 2>&1; done
		fi
		rm -f /Library/LaunchAgents/@LDNAME_LAC@.plist
	fi
}

service_running() {
	if [ -f "${PATH_DWA}/dwagent.pid" ]; then
		PIDDW=`cat ${PATH_DWA}/dwagent.pid`
		kill -0 $PIDDW > /dev/null 2>&1
		if test $? -eq 0; then
			cmdtest=$(ps -p "$PIDDW" -o comm=)
			cmdexpected=$(ps -p $$ -o comm=)
			if [ "$cmdtest" = "$cmdexpected" ]; then
				return 0
			else
				rem_file "${PATH_DWA}/dwagent.pid"	
			fi			
		else
			rem_file "${PATH_DWA}/dwagent.pid"
		fi
	fi
	return 1
}

start() {
	if check_macos_version "10.11"; then
		if ! launchctl bootstrap system /Library/LaunchDaemons/@LDNAME_SERVICE@.plist; then
			RETVAL=1
		fi
	else
		if ! launchctl load -w -F /Library/LaunchDaemons/@LDNAME_SERVICE@.plist; then
			RETVAL=1
		fi		
	fi
	if [ $RETVAL -eq 0 ]; then
		#WAIT SERVICE START
		timeout=10
		elapsed=0
		while [ "$elapsed" -lt "$timeout" ]; do
			if service_running; then
				break
			fi
			sleep 1
			elapsed=$((elapsed + 1))
		done
	fi	
}

stop() {
	if check_macos_version "10.11"; then
		if ! launchctl bootout system /Library/LaunchDaemons/@LDNAME_SERVICE@.plist; then
			RETVAL=1
		fi
	else
		if ! launchctl unload -F /Library/LaunchDaemons/@LDNAME_SERVICE@.plist; then
			RETVAL=1
		fi
	fi
	if [ $RETVAL -eq 0 ]; then
		#WAIT SERVICE STOP
		timeout=10
		elapsed=0
		while [ "$elapsed" -lt "$timeout" ]; do
			if ! service_running; then
				break
			fi
			sleep 1
			elapsed=$((elapsed + 1))
		done
	fi	
}

installAutoRun() {
	ln -s "${PATH_DWA_NATIVE}/dwagsystray.plist" /Library/LaunchAgents/@LDNAME_SYSTRAY@.plist
	if check_macos_version "10.11"; then
		for USER in `users`; do launchctl bootstrap gui/`id -u $USER` /Library/LaunchAgents/@LDNAME_SYSTRAY@.plist > /dev/null 2>&1; done
		for USER in `users`; do launchctl start gui/`id -u $USER`/@LDNAME_SYSTRAY@ > /dev/null 2>&1; done
	else
		for USER in `users`; do sudo -u $USER launchctl load -F -S Aqua /Library/LaunchAgents/@LDNAME_SYSTRAY@.plist > /dev/null 2>&1; done
	fi
}

removeAutoRun() {
	if [ -f "/Library/LaunchAgents/@LDNAME_SYSTRAY@.plist" ]; then
		if check_macos_version "10.11"; then
			for USER in `users`; do launchctl bootout gui/`id -u $USER` /Library/LaunchAgents/@LDNAME_SYSTRAY@.plist > /dev/null 2>&1; done
		else
			for USER in `users`; do sudo -u $USER launchctl unload -F -S Aqua /Library/LaunchAgents/@LDNAME_SYSTRAY@.plist > /dev/null 2>&1; done
		fi
		rm -f /Library/LaunchAgents/@LDNAME_SYSTRAY@.plist
	fi
}

case "$1" in
start)
  start
;;
stop)
  stop
;;
run)
  run
;;
install)
  install
;;
delete)
  delete
;;
installAutoRun)
  installAutoRun
;;
removeAutoRun)
  removeAutoRun
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
esac

exit $RETVAL
