#!/bin/sh
# Copyright (c) 2000-2018 Synology Inc. All rights reserved.
echo ${SYNOPKG_PKGNAME}

#Include common scripts
SURVEILLANCE_INC_SCRP=/var/packages/SurveillanceStation/target/scripts/SurveillanceStationCommon.sh
if [ -f "${SURVEILLANCE_INC_SCRP}" ]; then
	. ${SURVEILLANCE_INC_SCRP}
else
	echo "$(date +'%b %e %H:%M:%S') $(basename ${SURVEILLANCE_INC_SCRP}) not found." >> "/var/log/surveillance/surveillance.log"
	exit 0
fi

# customized items of package
if [ -z "$SYNOPKG_PKGNAME" ]; then
	# prior DSM 3.2, start script will be run without environment variable
	# at boot time, thus we need a workaround to gather name and version info
	PACKAGE_NAME="SurveillanceStation"
	PACKAGE_VER=$(get_key_value "/var/packages/${PACKAGE_NAME}/INFO" "version")
else
	PACKAGE_NAME=$SYNOPKG_PKGNAME
	PACKAGE_VER=$SYNOPKG_PKGVER
fi

PACKAGE_DIR="/var/packages/${PACKAGE_NAME}"
SCRIPTS_DIR="/var/packages/${PACKAGE_NAME}/target/scripts"
APP_PATH="/usr/syno/synoman/webman/3rdparty/$PACKAGE_NAME"
DSM_INDEX_ADD="/usr/syno/bin/pkgindexer_add"
DSM_INDEX_DEL="/usr/syno/bin/pkgindexer_del"
UI_PATH="/usr/syno/synoman/surveillance"
SCR_PATH="/usr/syno/synoman/scripts"
PKG_APP_PATH="${PACKAGE_DIR}/target/ui"
PKG_INDEXDB_PATH="${PACKAGE_DIR}/target/indexdb"
PACKAGE_ENABLED="${PACKAGE_DIR}/enabled"
SYNO_DATE_TOOL="/usr/syno/sbin/synodate"
DSM_STRINGS_FILE="/usr/syno/synoman/webman/texts/${SYNOPKG_DSM_LANGUAGE}/strings"
PKG_STRINGS_FILE="${PACKAGE_DIR}/target/ui/texts/${SYNOPKG_DSM_LANGUAGE}/strings"

SYSTEM_WEBAPI_DIR="/usr/syno/synoman/webapi"
PACKAGE_WEBAPI_DIR="${PACKAGE_DIR}/target/webapi"
PACKAGE_AUTH_FILE="surveillancestation.auth"
PACKAGE_API_FILE="SurveillanceStation.api"
PACKAGE_SURVEILLANCE_API_FILE="`/bin/ls -d ${PACKAGE_WEBAPI_DIR}/*/ | cut -d'/' -f7`"

CreateWebapiLink()
{
	ln -sf "${PACKAGE_WEBAPI_DIR}/${PACKAGE_AUTH_FILE}" "${SYSTEM_WEBAPI_DIR}/${PACKAGE_AUTH_FILE}"
	ln -sf "${PACKAGE_WEBAPI_DIR}/${PACKAGE_API_FILE}" "${SYSTEM_WEBAPI_DIR}/${PACKAGE_API_FILE}"

	for each in ${PACKAGE_SURVEILLANCE_API_FILE}; do
		if [ -f ${PACKAGE_WEBAPI_DIR}/${each}/conf/*.lib ]; then
			ln -sf ${PACKAGE_WEBAPI_DIR}/${each}/conf/*.lib ${SYSTEM_WEBAPI_DIR}/
		fi
	done

	ln -sf "${PACKAGE_WEBAPI_DIR}" "${SYSTEM_WEBAPI_DIR}/${PACKAGE_NAME}"
}

RemoveWebapiLink()
{
	rm -rf "${SYSTEM_WEBAPI_DIR}/${PACKAGE_AUTH_FILE}"
	rm -rf "${SYSTEM_WEBAPI_DIR}/${PACKAGE_API_FILE}"
	rm -rf ${SYSTEM_WEBAPI_DIR}/SYNO.SurveillanceStation.*.lib

	if [ -L ${SYSTEM_WEBAPI_DIR}/\*.lib ]; then
		rm -rf ${SYSTEM_WEBAPI_DIR}/\*.lib
	fi

	rm -rf "${SYSTEM_WEBAPI_DIR}/${PACKAGE_NAME}"
}

IsNTPServerEnabled()
{
	if [ true == $(IsDSM7) ]; then
		#NTP-server is not normal systemd unit, call webapi to get real enable status
		if [ "true" = "$(${SYNO_WEBAPI} --exec api=SYNO.Core.Region.NTP.Server method=get version=1 2>/dev/null | jq -r '.data.enable')" ]; then
			echo true
		else
			echo false
		fi
	else
		${SYNO_SERVICE_TOOL} --is-enabled ntpd-server > /dev/null 2>&1
		if [ $? -ne ${RET_SYNO_SERVICE_ENABLED} ]; then
			echo false
		else
			echo true
		fi
	fi
}

CheckNTPEnabled()
{
	if [ false == $(IsNTPServerEnabled) ] && [ -x $SYNO_DATE_TOOL ]; then
		SSDebugLog "Run ntpd-server before ss starts."
		$SYNO_DATE_TOOL --startNTPServer
		echo "$(PkgGetString "${DSM_STRINGS_FILE}" time ss_enable_warning)" > $SYNOPKG_TEMP_LOGFILE
	fi
}

CheckSsdRunning()
{
	if [ -n "$(pidof ssd)" -a "x" = "x$SYNOPKG_PKG_STATUS" ]; then
		SSDebugLog "Surveillance Station is already running."
		exit 0
	fi
}

CheckDBVersion()
{
	local CurrentVersion=$(/bin/get_key_value "${SS_PKG_INFO_FILE}" version)
	local SqlVersion=$(/bin/get_key_value "${SS_SETTINGS_CONF}" "${SS_SQL_VER_KEY}" | sed 's/\.//g' | sed 's/-//g')
	local UpgraderVersion=$(/bin/get_key_value "${SS_SETTINGS_CONF}" "${SS_UPGRADER_VER_KEY}")

	if [ -z ${SqlVersion} ] || [ "$(echo ${CurrentVersion} | sed 's/\.//g' | sed 's/-//g')" -gt "${SqlVersion}" ];then
		SSDebugLog "Need to run sql. Surveillance: ""${CurrentVersion}"". sql: ""${SqlVersion}"
		${SS_SQL_UPGRADE_SCRIPT}
	fi

	if [ -z ${UpgraderVersion} ];then
		SSDebugLog "Need to run upgrader. Surveillance: ""${CurrentVersion}"". Upgrader: None"
		${SS_UPGRADER} 0
	elif [ "$(echo ${CurrentVersion} | cut -d '-' -f 2)" -gt "${UpgraderVersion}" ];then
		SSDebugLog "Need to run upgrader. Surveillance: ""${CurrentVersion}"". Upgrader: ""${UpgraderVersion}"
		${SS_UPGRADER} ${UpgraderVersion}
	fi
}

EnableApacheModule()
{
	local blEnable="$1"
	local ModuleSourceDir="${SS_TARGET_DIR}/ui/apache_module"

	# For Liveview
	local ConfLiveviewFile="ssliveview.alias.conf"
	local ConfLiveviewSourcePath="${ModuleSourceDir}/${ConfLiveviewFile}"
	local ConfLiveviewInstallPath="/etc/httpd/sites-enabled/${ConfLiveviewFile}"
	local ModuleLiveviewFile="mod_ssliveview.so"
	local ModuleLiveviewSourcePath="${ModuleSourceDir}/${ModuleLiveviewFile}"
	local ModuleLiveviewInstallPath="/lib/httpd/modules/${ModuleLiveviewFile}"

	# For RTSP Server
	local ConfRTSPFile="ssrtsp.alias.conf"
	local ConfRTSPSourcePath="${ModuleSourceDir}/${ConfRTSPFile}"
	local ConfRTSPInstallPath="/etc/httpd/sites-enabled/${ConfRTSPFile}"
	local ModuleRTSPFile="mod_ssrtsp.so"
	local ModuleRTSPSourcePath="${ModuleSourceDir}/${ModuleRTSPFile}"
	local ModuleRTSPInstallPath="/lib/httpd/modules/${ModuleRTSPFile}"

	rm -f ${ConfLiveviewInstallPath}
	rm -f ${ConfRTSPInstallPath}
	rm -f ${ModuleLiveviewInstallPath}
	rm -f ${ModuleRTSPInstallPath}

	if [ true == ${blEnable} ]; then
		ln -s ${ConfLiveviewSourcePath} ${ConfLiveviewInstallPath}
		ln -s ${ConfRTSPSourcePath} ${ConfRTSPInstallPath}
		ln -s ${ModuleLiveviewSourcePath} ${ModuleLiveviewInstallPath}
		ln -s ${ModuleRTSPSourcePath} ${ModuleRTSPInstallPath}
	fi

	if [ false == ${blEnable} ] && [ "UPGRADE" == "${SYNOPKG_PKG_STATUS}" ]; then
		return
	fi

}

EnableHelpIndex()
{
	local blEnable="$1"
	local BinFile

	if [ true == ${blEnable} ]; then
		BinFile="${DSM_INDEX_ADD}"
	else
		BinFile="${DSM_INDEX_DEL}"
	fi

	${BinFile} ${PKG_APP_PATH}/index.conf ${PKG_INDEXDB_PATH}/appindexdb
}

CheckS82StartRet()
{
	local Ret=$1

	if [ 0 -ne "${Ret}" ]; then
		SSDebugLog "Failed to run S82surveillance.sh, ret: ${Ret}."
		RemoveWebapiLink
		exit 1
	fi
}

start()
{
	if [ ! -f $PACKAGE_ENABLED ]; then
		exit 0;
	fi

	CheckNTPEnabled
	CheckSsdRunning
	CheckDBVersion

	CreateWebapiLink
	${SCRIPTS_DIR}/S82surveillance.sh start
	CheckS82StartRet $?

	EnableApacheModule true
	EnableHelpIndex true

	exit 0
}

stop()
{
	RemoveWebapiLink
	EnableHelpIndex false
	EnableApacheModule false

	${SCRIPTS_DIR}/S82surveillance.sh stop

	exit 0
}

main()
{
	case $1 in
		start)
			MakeDebugLogDir
			SSDebugLog "start"

			if ShouldRunApiDaemon; then
				initctl start pkg-surveillance-apid
			fi

			start
			SSDebugLog "start complete"

			exit 0
		;;
		stop)
			SSDebugLog "stop"

			if ShouldRunApiDaemon; then
				initctl stop pkg-surveillance-apid
			fi

			stop
			SSDebugLog "stop complete"

			exit 0
		;;
		status)
			if [ -e ${APP_PATH} ]; then
				exit 0
			else
				exit 1
			fi
		;;
		killall)
		;;
		log)
			exit 0
		;;
	esac
}

main "$@"
