#!/bin/bash

SCRIPT_VER="1.3"

APP="RSB WizTorrent"
APP_CATEGORY="Torrent Clients and Utilities"
APP_SCOPE="user"
APP_ENABLED="yes"
STORED_PASSWORD_SERVICE="userdir"
#><#APP_CHECK_VER_CMD="if [ -e "${APP_DIRECTORY}/package.json" ] ; then jq -r ".version" < "${APP_DIRECTORY}/package.json" ; else echo "" ; fi"
SUPPORTED_ON="Ubuntu20.04,Ubuntu22.04"
USE_APACHE2="yes"
DAEMON_PORT=3005
LIBRARY="functions4.sh"

if [ "${SUPPORT-}" = '' ]; then
    SUPPORT="https://installers.rapidseedbox.com/scripts/whmcs_client_installers/support"
fi

LOGFILE="/var/log/whmcs_client_installers/${0}.log"
[ ! -d "/var/log/whmcs_client_installers" ] && mkdir -p "/var/log/whmcs_client_installers"

wget -4 -nc -q --no-check-certificate --timeout=20 --tries=5 ${SUPPORT}/${LIBRARY} >> "${LOGFILE}" 2>&1
if [ ! -f "./${LIBRARY}" ] ; then
    echo "55"
    echo "Error downloading \"${SUPPORT}/${LIBRARY}\"" >> "${LOGFILE}"
    exit 55
fi

# shellcheck source=support/functions4.sh
. "./${LIBRARY}"
SCRIPTENTRY

VALIDATE_USER

APP_DIRECTORY="${USERHOME}/rsb-wiztorrent"
APP_DATA_DIRECTORY="${USERHOME}/WizTorrent"
APP_LOG_DIRECTORY="/var/log/rsb-wiztorrent"

while : ; do

    main_rc=1

    CHECK_APP ; _rc=$?
    if [ ${_rc} -ne 0 ] ; then
        main_rc=${_rc}
        break
    fi


    if [ "${USERUID}" != "${FIRST_UID}" ] ; then
        ERROR "Cannot install this application for the user account '${USERNAME}'"
        break
    fi

    NODEJS_INSTALL || break

    WT_PORT="$(( USERUID - FIRST_UID + 3005 ))"

    WGET "${SUPPORT}/wiztorrent/torrent-client-master.zip" \
         && UNZIP "${TMP_DIR}/torrent-client-master.zip" "${USERHOME}/" \
      || break

    MV "${USERHOME}/torrent-client-master" "${APP_DIRECTORY}" || break

    oWD="$( pwd )"
    cd "${APP_DIRECTORY}"
    RUN_LOG "npm install 2>&1" || break
    RUN_LOG "npm audit fix --force 2>&1"
    RUN_LOG "npm run bundle-electron-wiztorrent-basic 2>&1" || break
    cd "${oWD}"

    # --- Listen on localhost:3005 only
    sed -i -r -e "s|(\s*)server.listen\(port,\s*async \(\)\s*=>\s*\{(.*).*$|\1server.listen('3005', '127.0.0.1', async () => {\2|" "${APP_DIRECTORY}/start.js" >> "${LOGFILE}" 2>&1 || break

    CHOWN_DIR "${USERNAME}":"${USERNAME}" "${APP_DIRECTORY}" || break

    # SystemD service unit
    if [ ! -e "/etc/systemd/system/rsb-wiztorrent@.service" ] ; then
        cat <<-EOF > "/etc/systemd/system/rsb-wiztorrent@.service"
	[Service]
	WorkingDirectory=/home/%I/rsb-wiztorrent
	ExecStart=/usr/bin/npm run prod
	Restart=always
	#StandardOutput=null
	StandardOutput=syslog
	StandardError=syslog
	SyslogIdentifier=rsb-wiztorrent
	User=%I
	Group=%I
	Environment=NODE_ENV=production

	[Install]
	WantedBy=multi-user.target
	EOF
        SYSTEMD_RELOAD
    fi

    if [ -d "/etc/rsyslog.d" ] ; then
        if [ ! -d "${APP_LOG_DIRECTORY}" ] ; then
            MKDIR "${APP_LOG_DIRECTORY}" || break
        fi
        CHOWN_FILE root:syslog "${APP_LOG_DIRECTORY}" || break
        CHMOD_FILE 0775 "${APP_LOG_DIRECTORY}" || break
        touch "${APP_LOG_DIRECTORY}/daemon.log" > /dev/null 2>&1
        CHOWN_FILE syslog:syslog "${APP_LOG_DIRECTORY}/daemon.log"
        CHMOD_FILE 0640 "${APP_LOG_DIRECTORY}/daemon.log"
        cat <<-EOF > "/etc/rsyslog.d/050-rsb-wiztorret.conf"
	if \$programname startswith 'rsb-wiztorrent' then ${APP_LOG_DIRECTORY}/daemon.log
	& ~
	EOF
        SVC_ISACTIVE "rsyslog" \
            && SVC_RESTART "rsyslog"
    fi

    if [ -d "/etc/logrotate.d" ] ; then
        cat <<-EOF > "/etc/logrotate.d/rsb-wiztorret"
	"${APP_LOG_DIRECTORY}/daemon.log"
	{
	   create 640 syslog syslog
	   rotate 3
	   daily
	   missingok
	   notifempty
	   delaycompress
	   compress
	}
	EOF
    fi

    SVC_ENABLE "rsb-wiztorrent@${USERNAME}" || break
    SVC_START  "rsb-wiztorrent@${USERNAME}" || break


    main_rc=0
    break

done


# Cleanup if error
if [ ${main_rc} -ne 0 -a ${main_rc} -ne 111 -a ${main_rc} -ne 117 ] ; then
    ERROR "'${APP}': Installation failed."
    # Cleanup tasks here
    SVC_DISABLE "rsb-wiztorrent@${USERNAME}"
    SVC_STOP    "rsb-wiztorrent@${USERNAME}"
    [ -d "${APP_DIRECTORY}" ] && RM_DIRS "${APP_DIRECTORY}"
    [ -d "${APP_DATA_DIRECTORY}" ] && RM_DIRS "${APP_DATA_DIRECTORY}"
    RM_FILES    "/etc/systemd/system/rsb-wiztorrent@.service" \
                "/etc/systemd/system/rsb-wiztorrent.slice"
    RM_DIRS     "/etc/systemd/system/rsb-wiztorrent@.service.d" \
                "${APP_LOG_DIRECTORY}"
    SYSTEMD_RELOAD
fi

SCRIPTEXIT
