#!/bin/bash

SCRIPT_VER="1.16"

APP="Radarr"
APP_CATEGORY="Torrent Clients and Utilities"
APP_SCOPE="user"
APP_ENABLED="yes"
STORED_PASSWORD_SERVICE="user"
#><#APP_CHECK_VER_CMD="[ -e "/opt/Radarr/version.id" ] && cat "/opt/Radarr/version.id" || echo """
SUPPORTED_ON="Ubuntu20.04,Ubuntu22.04,Ubuntu24.04"
USE_APACHE2="yes"
DAEMON_PORT=7879
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}
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}/.config/radarr"
APP_HOME="/opt/Radarr"

while : ; do

    main_rc=1

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

    [ -d "${USERHOME}" ] || break

    APT_INSTALL "gnupg" "ca-certificates" || break

    #
    # https://github.com/Radarr/Radarr
    #
    APT_UPDATE || break
    APT_INSTALL "curl" "jq" || break

    # Install dependencies:
    APT_INSTALL "mediainfo" "libsqlite3-0" || break

    if [ ! -e "${APP_HOME}/version.id" ] ; then
        if [ -d "${APP_HOME}" ] ; then
            RM_DIRS "${APP_HOME}"
        fi
        INFO "Installing ${APP} into ${APP_HOME}"
        GITHUB_RELEASE "Radarr/Radarr" "latest" "x64" "tar.gz" "linux-core" || break
        _ver="${GITHUB_RELEASE_VERSION//v/}"
        APP_URL="${GITHUB_RELEASE_ASSET_URL}"
        APP_ARCHIVE="${GITHUB_RELEASE_ASSET_NAME}"

        if [ -z "${APP_URL}" ] ; then
            ERROR "Failed to resolve ${APP} release !"
            break
        fi

        WGET "${APP_URL}" || break
        TAR_ZXF "${TMP_DIR}/${APP_ARCHIVE}" "/opt/" || break
        echo "${_ver}" > "${APP_HOME}/version.id"
        CHOWN_DIR root:root "${APP_HOME}" || break
        RUN_LOG "find ${APP_HOME} -type d -exec chmod 755 {} \;"
        RUN_LOG "find ${APP_HOME} -type f -exec chmod 755 {} \;"
    fi

    MKDIR "${APP_DIRECTORY}" || break
    CHOWN_DIR "${USERNAME}":"${USERNAME}" "${APP_DIRECTORY}" || break
 
    RADARR_DAEMON_PORT="$(( USERUID + 7879 - FIRST_UID ))"

    cat <<-EOF > "/etc/systemd/system/radarr@.service"
	[Unit]
	Description=${APP} Daemon
	After=syslog.target network.target

	[Service]
	User=%i
	Group=%i
	Type=simple
	ExecStart=/opt/Radarr/Radarr -nobrowser -data=/home/%i/.config/radarr
	TimeoutStopSec=20
	KillMode=process
	Restart=on-failure

	[Install]
	WantedBy=multi-user.target
	EOF

    cat <<-EOF > "/etc/systemd/system/radarr.slice" 2>> "${LOGFILE}"
	[Unit]
	Description=${APP} resource limiting
	Before=slices.target

	[Slice]
	CPUAccounting=yes
	CPUQuota=20%
	IOAccounting=yes
	IOReadBandwidthMax=/ 20M
	IOWriteBandwidthMax=/ 20M
	EOF

    [ ! -d "/etc/systemd/system/radarr@.service.d" ] \
        && MKDIR "/etc/systemd/system/radarr@.service.d"

    cat <<-EOF > "/etc/systemd/system/radarr@.service.d/001-Slice.conf"
	[Service]
	Slice=radarr.slice
	EOF

    SYSTEMD_RELOAD

    if [ "${USERUID}" = "${FIRST_UID}" ] ; then
        cat <<-EOF > "${APP_DIRECTORY}/config.xml"
		<Config>
		  <Port>${RADARR_DAEMON_PORT}</Port>
		  <BindAddress>127.0.0.1</BindAddress>
		  <UrlBase>radarr</UrlBase>
		  <EnableSsl>False</EnableSsl>
		  <LaunchBrowser>False</LaunchBrowser>
		  <UpdateAutomatically>False</UpdateAutomatically>
		  <AuthenticationMethod>External</AuthenticationMethod>
		</Config>
		EOF
    else
        cat <<-EOF > "${APP_DIRECTORY}/config.xml"
		<Config>
		  <Port>${RADARR_DAEMON_PORT}</Port>
		  <BindAddress>127.0.0.1</BindAddress>
		  <UrlBase>radarr-${USERNAME}</UrlBase>
		  <EnableSsl>False</EnableSsl>
		  <LaunchBrowser>False</LaunchBrowser>
		  <UpdateAutomatically>False</UpdateAutomatically>
		  <AuthenticationMethod>External</AuthenticationMethod>
		</Config>
		EOF
    fi
    CHOWN_FILE "${USERNAME}":"${USERNAME}" "${APP_DIRECTORY}/config.xml" || break

    # We can use ubuntu own libsqlite3 according to radarr FAQ
    if [[ "${LSB_VER}" == "Ubuntu20.04" ]]; then
        RUN_LOG "rm -f ${APP_HOME}/libe_sqlite3.so"
        RUN_LOG "ln -s /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 ${APP_HOME}/libe_sqlite3.so"
    fi
    
    SVC_ENABLE "radarr@${USERNAME}" || break
    SVC_START  "radarr@${USERNAME}" || break

    # Configure Apache
    if [ -d "/etc/apache2/userconf-enabled" ] ; then
        [ -e "/etc/apache2/userconf-enabled/radarr-${USERNAME}.conf" ] \
            && RM_FILES "/etc/apache2/userconf-enabled/radarr-${USERNAME}.conf"
        if [ "${USERUID}" = "${FIRST_UID}" ] ; then
            cat <<-EOF > "/etc/apache2/userconf-enabled/radarr-${USERNAME}.conf" 2>> "${LOGFILE}"
		RewriteEngine on
		RewriteRule ^/radarr$ /radarr/ [R=permanent]
		ProxyPreserveHost on
		ProxyPass /radarr http://localhost:${RADARR_DAEMON_PORT}/radarr connectiontimeout=5 timeout=300
		ProxyPassReverse /radarr http://localhost:${RADARR_DAEMON_PORT}/radarr

		<Location /radarr>
		    Order deny,allow
		    Deny from all
		    Allow from all
		    AuthType Digest
		    AuthName "apache2"
		    AuthDigestProvider file
		    AuthUserFile "/etc/apache2/users.password"
		    Require user ${USERNAME}
		</Location>
		EOF
        else
            cat <<-EOF >> "/etc/apache2/userconf-enabled/radarr-${USERNAME}.conf" 2>> "${LOGFILE}"
		RewriteEngine on
		RewriteRule ^/radarr-${USERNAME}$ /radarr-${USERNAME}/ [R=permanent]
		ProxyPreserveHost on
		ProxyPass /radarr-${USERNAME} http://localhost:${RADARR_DAEMON_PORT}/radarr-${USERNAME} connectiontimeout=5 timeout=300
		ProxyPassReverse /radarr-${USERNAME} http://localhost:${RADARR_DAEMON_PORT}/radarr-${USERNAME}

		<Location /radarr-${USERNAME}>
		    Order deny,allow
		    Deny from all
		    Allow from all
		    ProxyPass http://127.0.0.1:${RADARR_DAEMON_PORT}/radarr-${USERNAME}
		    ProxyPassReverse http://127.0.0.1:${RADARR_DAEMON_PORT}/radarr-${USERNAME}
		    AuthType Digest
		    AuthName "apache2"
		    AuthDigestProvider file
		    AuthUserFile "/etc/apache2/users.password"
		    Require user ${USERNAME}
		</Location>
		EOF
        fi
        SVC_RELOAD "apache2"
    fi


    main_rc=0
    break

done


SCRIPTEXIT
