#!/bin/sh

PACKAGE_NAME=$SYNOPKG_PKGNAME
PACKAGE_DEST=$SYNOPKG_PKGDEST
PKG_STATUS=$SYNOPKG_PKG_STATUS
PACKAGE_DIR="/var/packages/PhotoStation"
PHOTO_PHP_INI="SYNO.SDS.PhotoStation.ini"
PACKAGE_CONFIG_MIGRATE_SH="/usr/syno/bin/package_config_migrate.sh"
SYNO_SERVICE_TOOL="/usr/syno/sbin/synoservice"
SYNO_INFO="/etc/synoinfo.conf"
SYNO_DEF_INFO="/etc.defaults/synoinfo.conf"
DSM_DIR="/usr/syno/synoman"

MOVE_KEYS="runpersonalphotostation albumdefpublic photo_hide_icon external_port_photo_https external_port_photo_http"
DELETE_KEYS="supportphoto supportphotopersonal runphoto"
COPY_KEYS="external_host_ip"

PHOTO_SCRIPT_DIR="$PACKAGE_DIR/target/photo_scripts"
PHP_BIN="/usr/local/bin/php70"
PHP_INI="/var/packages/PhotoStation/target/etc/SYNO.SDS.PhotoStation.ini"

OLD_FACERECOGNITION_QUEUE="/var/spool/photostation.queue"
OLD_FACERECOGNITION_QUEUE_TMP="/var/spool/photostation.queue.tmp"

WATERMARK_TMP_DIR=${SYNOPKG_PKGDEST_VOL}/@tmp/watermarks

PHOTO_PKG_SETTINGS="${PACKAGE_DIR}/etc/settings.conf"
PHOTO_CONVERT_ACL_KEY="convertphotoacl"
PHOTO_RUN_PPS_KEY="runpersonalphotostation"

PHOTO_NGINX_DISABLED_CONF="www.PhotoStation.disabled.conf"
NGINX_CONF_FOLDER="/usr/local/etc/nginx/conf.d"

PHOTO_SERVICE_DIR="/var/services/photo"
SYNOPHOTO_DSM_USER="/usr/syno/bin/synophoto_dsm_user"

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 . )
}

upgrade_config()
{
	mkdir -p "$PACKAGE_DIR"/etc/
	if [ ! -f "$PACKAGE_DIR/etc/settings.conf" ]; then
		cp -rf "${PACKAGE_DEST}"/etc/settings.conf "$PACKAGE_DIR"/etc
		chmod 755 "$PACKAGE_DIR"/etc/settings.conf

		#copy keys
		for key in $COPY_KEYS; do
			srckeyvalue=`grep ${key}= /etc/synoinfo.conf`
			deskeyvalue=`grep ${key}= "$PACKAGE_DIR/etc/settings.conf"`
			if [ -n $srckeyvalue -a -z $deskeyvalue ]; then
				echo $srckeyvalue >> "$PACKAGE_DIR/etc/settings.conf"
			fi
		done

		#move keys
		$PACKAGE_CONFIG_MIGRATE_SH move "$SYNO_INFO" "$PACKAGE_DIR/etc/settings.conf" "$MOVE_KEYS"

		#remove support keys
		$PACKAGE_CONFIG_MIGRATE_SH del "$SYNO_INFO" "$DELETE_KEYS"
		$PACKAGE_CONFIG_MIGRATE_SH del "$SYNO_DEF_INFO" "$DELETE_KEYS"
	fi

	HideIcon=`/bin/get_key_value $PACKAGE_DIR/etc/settings.conf photo_hide_icon`
	if [ "$HideIcon" == "yes" ]; then
		sed -i "s,\"allUsers\":\(.*\)\,\"title,\"allUsers\":false\,\"title,g" $PACKAGE_DIR/target/ui/config
	fi
}

run_merge_script()
{
	GeoTagMerged=`/bin/get_key_value $PACKAGE_DIR/etc/settings.conf geo_tag_merged`
	/bin/sed -i $PACKAGE_DIR/etc/settings.conf -e "/geo_tag_merged=.*/d"
	if [ "$GeoTagMerged" != "yes" ]; then
		GeoTagMerged="no"
	fi

	PeopleTagMerged=`/bin/get_key_value $PACKAGE_DIR/etc/settings.conf ms_people_tag_merged`
	/bin/sed -i $PACKAGE_DIR/etc/settings.conf -e "/ms_people_tag_merged=.*/d"
	if [ "$PeopleTagMerged" != "yes" ]; then
		PeopleTagMerged="no"
	fi

	MigrateRecently=`/bin/get_key_value $PACKAGE_DIR/etc/settings.conf migrate_recently_add_comment`
	/bin/sed -i $PACKAGE_DIR/etc/settings.conf -e "/migrate_recently_add_comment=.*/d"
	if [ "$MigrateRecently" != "yes" ]; then
		MigrateRecently="no"
	fi

	PHP_PARAMS="--param package_path=$PACKAGE_DIR --param geo_tag_merged=$GeoTagMerged --param ms_people_tag_merged=$PeopleTagMerged --param migrate_recently_add_comment=$MigrateRecently"

	$PHP_BIN -c $PHP_INI $PACKAGE_DIR/target/photo_scripts/upgrade_db_data.php $PHP_PARAMS & > /dev/null 2>&1
}

insert_php_config()
{
	local SESSION_SAVE_PATH=/var/services/tmp/PhotoStation
	local ORI_FILE="$PACKAGE_DIR/target/etc/$PHOTO_PHP_INI.orig"
	local INI_FILE="$PACKAGE_DIR/target/etc/$PHOTO_PHP_INI"
	local PHP_INT_SIZE=`/usr/local/bin/php70 -r "echo PHP_INT_SIZE;"`

	if [ ! -d ${SESSION_SAVE_PATH} ]; then
		/bin/mkdir -m 0700 ${SESSION_SAVE_PATH}
		/bin/chown PhotoStation:PhotoStation ${SESSION_SAVE_PATH}
	fi

	/bin/rm -f $INI_FILE
	/bin/cp -f $ORI_FILE $INI_FILE

	if (( "$PHP_INT_SIZE" > "4" )); then
		synosetkeyvalue $INI_FILE upload_max_filesize 32G
		synosetkeyvalue $INI_FILE post_max_size 32G
	fi
}

install_user_data_collector_file() {
	local src_folder="${PACKAGE_DIR}/target/user_data_collector"
	local src_file=""
	local dest_dir=""
	# install conf file
	src_file="${src_folder}/photostation.config"
	dest_dir="/usr/syno/etc/user.data.conf"
	if [ ! -d ${dest_dir} ]; then
		mkdir -p ${dest_dir}
	fi
	cp -f ${src_file} ${dest_dir}

	# install binary file
	src_file="${src_folder}/synouserdata_photostation"
	dest_dir="/usr/syno/bin/user.data.collector"
	if [ ! -d ${dest_dir} ]; then
		mkdir -p ${dest_dir}
	fi
	cp -f ${src_file} ${dest_dir}
}

insert_nginx_conf()
{
	cp -f $PACKAGE_DIR/target/etc/SYNO.SDS.PhotoStation/$PHOTO_NGINX_DISABLED_CONF $NGINX_CONF_FOLDER/
}

disable_blog()
{
	/usr/bin/psql -U postgres photo -c "UPDATE blog_config SET config_value=0 WHERE module_name='main' AND config_key='enable_blog'"
}

check_watermark_dir() {
	local src_folder=""
	local dst_folder=""

	if [ -d "$PHOTO_SERVICE_DIR/@eaDir/" ]; then
		if [ ! -d "$PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_WATERMARK_DIR" ]; then
			mkdir "$PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_WATERMARK_DIR"

			# migrate watermark from package watermarks to photo @eaDir
			if [ -d "$PACKAGE_DIR/target/watermarks" ]; then
				cp -R $PACKAGE_DIR/target/watermarks/*/* $PHOTO_SERVICE_DIR/@eaDir/SYNOPHOTO_WATERMARK_DIR/
				users=`find /var/packages/PhotoStation/target/watermarks/* -type d | awk -F '/' '{print $NF}'`
				for user in $users;
				do
					#check pps
					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
						home=$(get_user_home_path "$user" | sed "s/^[ \t]*//g")
						dst_folder="${home}/photo/@eaDir"
						if [ -d ${dst_folder} ]; then
							mkdir "${dst_folder}/SYNOPHOTO_WATERMARK_DIR"
							cp $PACKAGE_DIR/target/watermarks/$user/* ${dst_folder}/SYNOPHOTO_WATERMARK_DIR/
							chown -R PhotoStation:PhotoStation ${dst_folder}/SYNOPHOTO_WATERMARK_DIR/
							find  ${dst_folder}/SYNOPHOTO_WATERMARK_DIR/ -type d -exec chmod 0755 {} \;
							find  ${dst_folder}/SYNOPHOTO_WATERMARK_DIR/ -type f -exec chmod 0644 {} \;
						fi
					fi
				done
			fi
		fi

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

get_user_home_path() {
	$SYNOPHOTO_DSM_USER --getinfo $1 | while read line
	do
		path=`echo $line | awk -F: '/^User\sDir\s+:\s+\[(.+)\]$/ {print $2}'`
		if [ "$path" != "" ]; then
			echo ${path//[\[|\]]/}
		fi
	done
}


upgrade_config
insert_php_config
insert_nginx_conf
install_user_data_collector_file

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

check_link_binary

disable_blog

if [ -e ${WATERMARK_TMP_DIR} ]; then
	mv ${WATERMARK_TMP_DIR} ${SYNOPKG_PKGDEST}
fi

# check watermark directory (originally /var/packages/PhotoStation/target/watermarks => /var/services/photo/@eaDir/SYNOPHOTO_WATERMARK_DIR )
# update watermark_db record
check_watermark_dir

run_merge_script


# we've moved queue to /var/services/photo/@eaDir,
# /var/spool/photostation.queue is no longer used
if [ -e $OLD_FACERECOGNITION_QUEUE ]; then
	rm -f $OLD_FACERECOGNITION_QUEUE
fi

if [ -e $OLD_FACERECOGNITION_QUEUE_TMP ]; then
	rm -f $OLD_FACERECOGNITION_QUEUE_TMP
fi

SMARTY_COMPILE_DIR=/tmp/synophoto_temp
if [ -d ${SMARTY_COMPILE_DIR} ]; then
	rm -rf ${SMARTY_COMPILE_DIR}
fi

exit 0
