#!/bin/sh

if [ -z "$SYNOPKG_PKGNAME" ]; then
    PACKAGE_NAME="PhotoStation"
    PACKAGE_VER=`get_key_value "/var/packages/${PACKAGE_NAME}/INFO" "version"`
else
    PACKAGE_NAME=$SYNOPKG_PKGNAME
    PACKAGE_VER=$SYNOPKG_PKGVER
fi

DSM_CONFIG="/etc.defaults/synoinfo.conf"
PACKAGE_DIR="/var/packages/$PACKAGE_NAME"
TARGET_DIR="$PACKAGE_DIR/target"
PACKAGE_ENABLED="${PACKAGE_DIR}/enabled"
SYNO_SERVICE_TOOL="/usr/syno/sbin/synoservice"
SYNO_RELAYD="/usr/syno/sbin/synorelayd"
PKG_LAN_DIR="$PACKAGE_DIR/target/photo/language"
DSM_DIR="/usr/syno/synoman"
PHOTO_PKG_SETTINGS="/var/packages/${PACKAGE_NAME}/etc/settings.conf"
PHOTO_RUN_PPS_KEY="runpersonalphotostation"
PHOTO_CONVERT_ACL_KEY="convertphotoacl"
PHOTO_SERVICE_DIR="/var/services/photo"

PHOTO_PHP_FPM_CONF="SYNO.SDS.PhotoStation.conf"
PHOTO_NGINX_CONF="www.PhotoStation.conf"
PHOTO_NGINX_PINGPONG_CONF="www.PhotoStation.pingpong.conf"
PHOTO_NGINX_DISABLED_CONF="www.PhotoStation.disabled.conf"
NGINX_CONF_FOLDER="/usr/local/etc/nginx/conf.d"

SDK_PLUGIN_DIR="/usr/local/libexec"
SDK_PLUGIN_BIN="synophoto_sdk_share_set"

PKG_APP_PATH="${PACKAGE_DIR}/target/ui"

PKG_STATUS=$SYNOPKG_PKG_STATUS
PHP_BIN="/usr/local/bin/php70"
PHP_INI="/var/packages/PhotoStation/target/etc/SYNO.SDS.PhotoStation.ini"

SYNOPHOTO_SMART_ALBUM_CONFIG="$PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_SMART_ALBUM_CONFIG"
PHOTOSTATION_SERVICE_TMP_DIR="/var/services/tmp/PhotoStation"

check_link_binary() {
	for f in $PACKAGE_DIR"/target/bin"/*; do
	    name=$(basename "$f")
	    if [ ! -e "/usr/syno/bin/"$name ]; then
		ln -sf  $f "/usr/syno/bin"
		echo "ln $f"
	    fi
	done

	( cd $PACKAGE_DIR/target/photo/blog/ ; ln -sf ../photo_login.php ./login.php )
	( cd $PACKAGE_DIR/target/photo/ ; ln -sf $DSM_DIR/webman/help/help.css . )
}

check_theme_dir() {
	if [ -d "$PHOTO_SERVICE_DIR/@eaDir/" ]; then
		if [ ! -d "$PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_THEME_DIR" ]; then
			mkdir "$PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_THEME_DIR"

			# migrate theme setting files from package etc to photo @eaDir
			if [ -d "$PACKAGE_DIR/etc/blog" ]; then
				mv $PACKAGE_DIR/etc/blog/* $PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_THEME_DIR/
			fi
		fi

		chown -R PhotoStation:PhotoStation $PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_THEME_DIR/
		find  $PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_THEME_DIR/ -type d -exec chmod 0755 {} \;
		find  $PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_THEME_DIR/ -type f -exec chmod 0644 {} \;
	fi
}

pkg_get_string() {
	local file=$1
	local key=$2
	grep $key $file | sed -n "s,^.*=\t'\(.*\)';,\1,p" | sed "s/\\\\'/'/g"
}

register_service_volume() {
	local volume=`/usr/bin/readlink /var/services/photo | /bin/sed  's,/@sharebin/photo$,,'`

	if [ ! -z "$volume" ]; then
		$SYNO_SERVICE_TOOL --regvol -n ${PACKAGE_NAME} -t SERVICE_PKG -p $volume  >/dev/null 2>&1
	fi
}

unregister_service_volume() {
	$SYNO_SERVICE_TOOL --unregvol -n ${PACKAGE_NAME} -t SERVICE_PKG >/dev/null 2>&1
}

add_relay_service() {
	$SYNO_RELAYD --add photo_http --add photo_https --hup
}

remove_relay_service() {
	$SYNO_RELAYD --remove photo_http --remove photo_https --hup
}

check_home_service() {
	runPPS=`/bin/get_key_value "$PHOTO_PKG_SETTINGS" "$PHOTO_RUN_PPS_KEY"`
	userHomeEnable=`/bin/get_key_value "/etc/synoinfo.conf" "userHomeEnable"`

	if [ "$runPPS" = "yes" ] && [ "$userHomeEnable" != "yes" ]; then
		# set run personal photo to no when user home is not enable
		/var/packages/PhotoStation/target/bin/synophoto_config -s "$PHOTO_RUN_PPS_KEY" -v "no"
	fi
}

check_indexing_queue() {
	/bin/grep R:photo /var/spool/syno_indexing_queue* > /dev/null 2>&1
	ret=$?
	if [ $ret = 0 ]; then
		# restart related daemons, to ensure load pkg info
		/usr/syno/sbin/synoservice --restart synoindexd
		/usr/syno/sbin/synoservice --restart synomkthumbd
		/usr/syno/sbin/synoservice --restart synomkflvd
	fi
}

set_upload_tmp_dir()
{
	#update ini file
	$PACKAGE_DIR"/target/bin/"$SDK_PLUGIN_BIN --set-upload-tmp-dir
}

start_message()
{
	local lan_file="${PKG_LAN_DIR}/${SYNOPKG_DSM_LANGUAGE}.php"
	if [ -e $lan_file ]; then
		local enable_warning=$(pkg_get_string "$lan_file" "photo_enable_warning")
		local download_text=$(pkg_get_string "$lan_file" "photo_str_download_now")
		local model_name=`get_key_value $DSM_CONFIG "upnpmodelname"`
		local link="(<a href=\"http://www.synology.com/support/download/$model_name\" target=\"_blank\">$download_text</a>)"
		echo "$enable_warning $link" > $SYNOPKG_TEMP_LOGFILE
	fi
}

default_setting()
{
	$PHP_BIN -c $PHP_INI $PACKAGE_DIR/target/photo_scripts/default_setting.php $PACKAGE_DIR & > /dev/null 2>&1
}

create_session_save_path()
{
	local SESSION_SAVE_PATH=/var/services/tmp/PhotoStation
	if [ ! -d ${SESSION_SAVE_PATH} ]; then
		/bin/mkdir -m 0700 ${SESSION_SAVE_PATH}
		/bin/chown PhotoStation:PhotoStation ${SESSION_SAVE_PATH}
	fi
}

convert_photo_acl()
{
	local value=`/usr/syno/bin/synogetkeyvalue $PHOTO_PKG_SETTINGS $PHOTO_CONVERT_ACL_KEY`
	local status=255

	$PACKAGE_DIR/target/bin/synophoto_acl --check
	status=$?
	if [ "1" == "$status" ] || [ "$value" == "running" ]; then
		$PACKAGE_DIR/target/bin/synophoto_acl --background_convert
		value="running"
	elif [ "0" == "$status" ]; then
		value="finish"
		/usr/syno/bin/synosetkeyvalue $PHOTO_PKG_SETTINGS $PHOTO_CONVERT_ACL_KEY $value
	fi

	if [ "$value" == "finish" ]; then
		$PACKAGE_DIR/target/photo_scripts/sql/acl_trigger.sh
		$PACKAGE_DIR/target/bin/synophoto_acl --adjust_setting
	fi
}

correct_db_func_owner()
{
	/usr/bin/psql -U postgres -qAt -c "SELECT p.proname || '(' || oidvectortypes(p.proargtypes) || ')' FROM pg_catalog.pg_namespace AS n JOIN pg_catalog.pg_proc AS p ON p.pronamespace = n.oid WHERE n.nspname = 'public'" photo | while read func
	do
		/usr/bin/psql -U postgres -qc "ALTER FUNCTION $func OWNER TO \"PhotoStation\"" photo;
		if [ "0" != "$?" ]; then
			echo "ALTER FUNCTION $func failed";
		fi
	done
}

insert_nginx_conf()
{
	rm -f $NGINX_CONF_FOLDER/$PHOTO_NGINX_DISABLED_CONF

	cp -f $TARGET_DIR/etc/SYNO.SDS.PhotoStation/$PHOTO_NGINX_CONF $NGINX_CONF_FOLDER/

	grep_result=`/usr/bin/grep pingpong\.php /etc/nginx/nginx.conf`
	if [ -z "$grep_result" ]; then  # pingpong.php rule not found in nginx conf, insert it
		cp -f $TARGET_DIR/etc/SYNO.SDS.PhotoStation/$PHOTO_NGINX_PINGPONG_CONF $NGINX_CONF_FOLDER/
	fi
}

remove_nginx_conf()
{
	rm -f $NGINX_CONF_FOLDER/$PHOTO_NGINX_CONF

	if [ -f "$NGINX_CONF_FOLDER/$PHOTO_NGINX_PINGPONG_CONF" ]; then
		rm -f $NGINX_CONF_FOLDER/$PHOTO_NGINX_PINGPONG_CONF
	fi

	cp -f $TARGET_DIR/etc/SYNO.SDS.PhotoStation/$PHOTO_NGINX_DISABLED_CONF $NGINX_CONF_FOLDER/
}

set_smart_album_config_permission()
{
	if [ -f $SYNOPHOTO_SMART_ALBUM_CONFIG ]; then
		chmod 0600 $SYNOPHOTO_SMART_ALBUM_CONFIG
		chgrp PhotoStation $SYNOPHOTO_SMART_ALBUM_CONFIG
		chown PhotoStation $SYNOPHOTO_SMART_ALBUM_CONFIG
	fi
}

set_photo_station_service_permission()
{
	if [ -d $PHOTOSTATION_SERVICE_TMP_DIR ]; then
		chmod -R 0700 $PHOTOSTATION_SERVICE_TMP_DIR
		chgrp -R PhotoStation $PHOTOSTATION_SERVICE_TMP_DIR
		chown -R PhotoStation $PHOTOSTATION_SERVICE_TMP_DIR
	fi
}

check_photo_target_dir()
{
	if [ -d $TARGET_DIR ]; then
		chown PhotoStation:PhotoStation $TARGET_DIR
	fi
}

case $1 in
	start)
		# check enabled
		if [ ! -f $PACKAGE_ENABLED ]; then
			exit 0;
		fi

		#set php upload tmp dir & sdk share_set plugin
		set_upload_tmp_dir

		#check & link photo binary to /usr/syno/bin
		check_link_binary

		# check theme directory (originally /var/services/blog => /var/packages/PhotoStation/etc/blog )
		check_theme_dir

		# if indexing queue has R:photo, restart related daemons
		check_indexing_queue

		#check_and_update_db_recover
		$PACKAGE_DIR/target/photo_scripts/sql.sh

		#After PhotoStation enabled, check thumbnails
		if [ "START" == "$PKG_STATUS" ] || [ "INSTALL" == "$PKG_STATUS" ]; then
			cmd="/usr/syno/bin/synoindex -P PhotoStation -R photo > /dev/null 2>&1"
			`$cmd`
			logger -p user.err -t "PhotoStation" "Re-index triggered, cmd [$cmd], script [$(basename $0) $@], PKG_STATUS = $PKG_STATUS"
		fi

		if [ "INSTALL" == "$PKG_STATUS" ]; then
			#message for package start complete
			start_message
		fi

		/usr/syno/bin/photostationd

		/usr/syno/bin/synocheckshare

		register_service_volume

		# check home service and personal photo
		check_home_service

		if [ "INSTALL" == "$PKG_STATUS" ]; then
			default_setting
		fi

		add_relay_service

		insert_nginx_conf

		create_session_save_path

		correct_db_func_owner

		convert_photo_acl

		set_smart_album_config_permission

		set_photo_station_service_permission

		check_photo_target_dir

		exit 0
	;;
	stop)
		killall photostationd > /dev/null
		killall facerecognition > /dev/null

		remove_relay_service

		# check enabled
		if [ -f $PACKAGE_ENABLED ]; then
			exit 0;
		fi

		unregister_service_volume

		remove_nginx_conf

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