#!/bin/sh

APP_ID=obm
APP_NAME=$SYNOPKG_PKGNAME
APP_BASE=$SYNOPKG_PKGDEST
APP_HOME="$SYNOPKG_PKGDEST/$APP_ID"
APP_VERSION="10.3.0.0"
TEMP_LOC="$SYNOPKG_PKGDEST_VOL/@tmp/_$APP_NAME"
mkdir -p $TEMP_LOC

# exit the script with error code returned
# shall do cleanup before exit
exit_now()
{
  rm -Rf $TEMP_LOC
  exit $1
}

# Setup components
# 1 - Component name
# 2 - Target path
setup_component()
{
  C_NAME=$1
  C_TARGET=$2
  C_TEMP_LOC="$TEMP_LOC/$C_NAME"
  echo "Setup '$C_NAME' begin"

  cp -Rf $C_TEMP_LOC/* $C_TARGET
  #rm -Rf $C_TEMP_LOC

  echo "Successfully setup '$C_NAME'"
}

# Setup prepackaged components
mkdir -p $APP_HOME/jvm
setup_component "jvm" $APP_HOME/jvm
setup_component "app-common" $APP_HOME
setup_component "nix-native" $APP_HOME
setup_component "util-nix" $APP_HOME
setup_component "properties-common" $APP_HOME
setup_component "app-nas" $APP_HOME
# 35603: create new package for custom.xml to avoid unnecessary rebuild
setup_component "app-custom-common-$APP_ID" $APP_HOME
# 38560: Supported AUA on NAS
setup_component "aua-native" $APP_HOME
setup_component "aua-common" $APP_HOME
setup_component "aua-nix-obm" $APP_HOME
setup_component "aua-inst-nix-obm" $APP_HOME


echo "Run $APP_ID installation"
cd $APP_HOME/bin
./install.sh

# 42830: call installerUtil for synology installer
# Reference path will be used to avoid empty space in the parent directory
LIB_HOME=.
# [Start] 42960: Fix InstallerUtil call when installing v9
FALLBACK_VERSION="9.15.0.0"
FALLBACK_MAJOR_VERSION=$(echo "$FALLBACK_VERSION" | cut -d'.' -f1)
# 42960 issue#4: function as legacy installer if legacy version marked in INFO file
# NEW_CLIENT_MAJOR_VERSION=$(echo "$APP_VERSION" | cut -d'.' -f1)
# Decide which client version to use
# CLIENT_MAJOR_VERSION="$FALLBACK_MAJOR_VERSION"
# if [ "${MACHINE_TYPE}" == "x86_64" ] || [ "${MACHINE_TYPE}" == "aarch64" ]; then
#     CLIENT_MAJOR_VERSION="$NEW_CLIENT_MAJOR_VERSION"
# fi
SYNOPKG_PKGVER_MAJOR_VERSION=$(echo "$SYNOPKG_PKGVER" | cut -d'.' -f1)
CLASSPATH=
DEP_LIB_PATH=
# No java options needed for v9
JAVA_OPTS=
# 42960 issue#4: function as legacy installer if legacy version marked in INFO file
# if [ "$CLIENT_MAJOR_VERSION" == "$NEW_CLIENT_MAJOR_VERSION" ]; then
if [ "$SYNOPKG_PKGVER_MAJOR_VERSION" != "$FALLBACK_MAJOR_VERSION" ]; then
    # [Start] 42830: call installerUtil for synology installer
    # Set DEP_LIB_PATH
    ./getEnvInfo.sh
    # Java options for v10 and above
    JAVA_OPTS=$(grep -vE '^\s*#|^\s*$' cb.ini | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | tr '\n' ' ')
    # [End] 42830
    CLASSPATH="$LIB_HOME:$LIB_HOME/cb.jar"
else
    # Set DEP_LIB_PATH
    SYSTEM_OS=`uname`
    SYSTEM_ARCH=`uname -m`

    OS_NAME=
    case "${SYSTEM_OS}" in
      Linux* )
        OS_NAME="Lin"
        ;;
      *BSD* )
        OS_NAME="Fbd"
        ;;
      SunOS )
        OS_NAME="Sos"
        SYSTEM_ARCH=`isainfo -b`
        ;;
      * )
        echo "OS \"${SYSTEM_OS}\" is not supported. Exit now."
        exit 1
        ;;
    esac

    OS_ARCH=
    if [ -z "${DEP_LIB_PATH}" ]; then
        case "${SYSTEM_ARCH}" in
            i[3-6]86 | 32)
                OS_ARCH="X86"
            ;;
            x86_64 | amd64 | 64)
                OS_ARCH="X64"
            ;;
            armv6*)
                OS_ARCH="Av6"
            ;;
            armv7*)
                OS_ARCH="Av7"
            ;;
            armv5*)
                OS_ARCH="Arm"
            ;;
            aarch64*)
                OS_ARCH="A64"
            ;;
            * )
                echo "Arch \"${SYSTEM_ARCH}\" is not supported. Exit now."
                exit 1
            ;;
        esac
        DEP_LIB_PATH=${OS_NAME}${OS_ARCH}
    fi
    # jdom is needed by v9 class path
    CLASSPATH="$LIB_HOME:$LIB_HOME/jdom-1.1.3.jar:$LIB_HOME/cb.jar"
fi
# [End] 42960

# [Start] 42830: call installerUtil for synology installer
JAVA_EXE=$APP_HOME/jvm/bin/java
JNI_PATH="-Djava.library.path=$LIB_HOME:$LIB_HOME/${DEP_LIB_PATH}"
MAIN_CLASS=InstallerUtil
# [End] 42960

INSTALLER_MODE="-i"
PRODUCT_EDITION="obm"

echo "Running installer post processes."

# Do not include double-quote for java options, jni path, classpath,
# main class, installer mode, and product edition
# Only apply double-quote for app home
"${JAVA_EXE}" $JAVA_OPTS $JNI_PATH -cp $CLASSPATH $MAIN_CLASS $INSTALLER_MODE $PRODUCT_EDITION "${APP_HOME}"
# [End] 42830

echo "Create UI resources"
cp $APP_HOME/bin/*.properties $APP_HOME/wui/languages
cp -Rf $APP_HOME/bin/*.png $APP_HOME/wui/
ln -s $APP_HOME/bin/help $APP_HOME/wui/help
# python2 -m compileall -f $APP_HOME/wui/*.py
# rm -f $APP_HOME/wui/*.py

echo "Copy images to WUI"
mkdir -p $TEMP_LOC/cb_archive
7z x $APP_HOME/bin/cb.jar -o$TEMP_LOC/cb_archive
cp -Rf $TEMP_LOC/cb_archive/images/* $APP_HOME/wui/images/
rm -Rf $TEMP_LOC/cb_archive

# Copy specially branded images
echo "Copy specially branded images"
setup_component "app-inst-nix-$APP_ID/bin/images" $APP_HOME/wui/images/

echo "Copy color scheme"
cp $TEMP_LOC/app-inst-nix-$APP_ID/lookandfeel.xml $APP_HOME/

echo "Create log folder"
mkdir -p $APP_HOME/log/WuiService
mkdir -p $APP_HOME/log/Scheduler

echo "Create config folder"
mkdir -p $SYNOPKG_PKGDEST/.$APP_ID/config
touch $SYNOPKG_PKGDEST/.$APP_ID/config/scheduler.run

echo "Create temp folder"
mkdir -p $SYNOPKG_PKGDEST/.$APP_ID/temp

# System Configure
echo "Make startup script"
# RC_PATH="/usr/local/etc/rc.d"
# ln -s /var/packages/$APP_NAME/scripts/start-stop-status $RC_PATH/$APP_NAME.sh
cp /var/packages/$APP_NAME/conf/logrotate.d/WuiService /usr/local/etc/logrotate.d/
cp /var/packages/$APP_NAME/conf/logrotate.d/Scheduler /usr/local/etc/logrotate.d/

touch $APP_BASE/enabled

echo "Add to DSM"
# Release
ln -s $APP_HOME/wui $APP_BASE/ui
# ln -s $APP_BASE/ui /usr/syno/synoman/webman/3rdparty/$APP_NAME

echo "Cleanup"
rm -Rf $TEMP_LOC

echo "Restore application data"
if [ -f "/tmp/obm.tar.gz" ]; then
  if [ -d "$SYNOPKG_PKGDEST/.obm" ]; then
    rm -f $SYNOPKG_PKGDEST/.obm/config/scheduler.run
    echo "Restoring to ${SYNOPKG_PKGDEST}/.obm"
    cd $SYNOPKG_PKGDEST/.obm
    tar -zxf /tmp/obm.tar.gz
    if [ $? == 0 ]; then
        rm -f /tmp/obm.tar.gz
    fi
  else
    echo "${SYNOPKG_PKGDEST}/.obm not found!"
  fi
else
  echo "Backup not found!"
fi
if [ -f "/tmp/obmHome.tar.gz" ]; then
  if [ -d "$SYNOPKG_PKGDEST/obm" ]; then
    echo "Restoring home.txt to ${SYNOPKG_PKGDEST}/obm"
    cd $SYNOPKG_PKGDEST/obm
    tar -zxf /tmp/obmHome.tar.gz
    if [ $? == 0 ]; then
        rm -f /tmp/obmHome.tar.gz
    fi
  else
    echo "${SYNOPKG_PKGDEST}/obm not found!"
  fi
else
  echo "Backup home.txt not found!"
fi

exit 0
