#!/bin/bash

SCRIPT_VER="1.2"

APP="Proxy Puppeteer"
APP_CATEGORY="Utilities"
APP_SCOPE="system"
APP_ENABLED="yes"
#><#APP_CHECK_VER_CMD="if [ -d "${APP_DIRECTORY}" ] ; then jq -r ".version" < "${APP_DIRECTORY}/package.json" ; else echo "" ; fi"
SUPPORTED_ON="Ubuntu20.04"
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="/opt/Proxy-Puppeteer"

PUPPETEER_USER="puppeteer"
PUPPETEER_GROUP="${PUPPETEER_USER}"

while : ; do

    main_rc=1

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

    if DPKG_CHECK "apache2" ; then
        main_rc=113
        ERROR "Please uninstall 'apache2' package!"
        break
    fi

    if [ ! -e "/usr/local/etc/3proxy/passwd" ] ; then
        main_rc=113
        ERROR "Please install '3proxy' service!"
        break
    fi

    APT_INSTALL \
        "nginx" \
        "apache2-utils" \
        "libnss3" \
        "libatk1.0-0" \
        "libatk-bridge2.0-0" \
        "libcups2" \
        "libxkbcommon0" \
        "libgtk-3-0" \
        "libgbm1" \
        "libx11-xcb1" \
      || break

#    if ! which npm > /dev/null 2>&1 ; then
#        APT_INSTALL "curl" "gcc" "g++" "make" || break
#        RUN_LOG "curl -sL https://deb.nodesource.com/setup_15.x | bash -" || break
#        APT_INSTALL "nodejs" || break
#    fi

    NODEJS_INSTALL || break

    MKDIR "${APP_DIRECTORY}" || break

    WGET "${SUPPORT}/Proxy-Puppeteer.tar.gz" \
        && TAR_ZXF "${TMP_DIR}/Proxy-Puppeteer.tar.gz" "${APP_DIRECTORY}/"

    RUN_LOG "sed -i 's/\(\s*\)headless:\s*false\(.*\)$/\1headless: true\2/g' ${APP_DIRECTORY}/main_app.js 2>&1"

    oWD="$( pwd )"
    cd "${APP_DIRECTORY}"
    RUN_LOG "npm install --loglevel verbose 2>&1" || break
    RUN_LOG "npm audit fix --loglevel verbose 2>&1" || break
    cd "${oWD}"

    if ! id "${PUPPETEER_USER}" > /dev/null 2>&1 ; then
        RUN_LOG "useradd -r -M -c '${APP} Service' -d '${APP_DIRECTORY}' ${PUPPETEER_USER} 2>&1" \
            || break
    fi
    CHOWN_DIR root:root "${APP_DIRECTORY}"


    # SystemD service unit
    if [ ! -e "/etc/systemd/system/puppeteer.service" ] ; then
        cat <<-EOF > "/etc/systemd/system/puppeteer.service"
	[Unit]
	Description=Puppeteer instance
	After=network-online.target
	Wants=network-online.target systemd-networkd-wait-online.service
	StartLimitIntervalSec=500
	StartLimitBurst=5

	[Service]
	WorkingDirectory=${APP_DIRECTORY}
	ExecStart=/usr/bin/node main_app.js
	StandardOutput=syslog
	StandardError=syslog
	SyslogIdentifier=notell
	User=${PUPPETEER_USER}
	Group=${PUPPETEER_GROUP}
	#Environment=NODE_ENV=production
	Restart=on-failure

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

#    SVC_ENABLE "puppeteer" || break
#    SVC_START  "puppeteer" || break
    SVC_DISABLE "puppeteer" || break
    SVC_STOP    "puppeteer" || break

    RUN_LOG "easy-ssl-nginx -b -f" || 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
    if [ -e "/etc/systemd/system/puppeteer.service" ] ; then
        SVC_DISABLE "puppeteer"
        SVC_STOP  "puppeteer"
        RM_FILES "/etc/systemd/system/puppeteer.service"
        SYSTEMD_RELOAD
    fi
    [ -e "${APP_DIRECTORY}" ] \
        && RM_DIRS "${APP_DIRECTORY}"
fi

SCRIPTEXIT
