#!/bin/bash

SCRIPT_VER="1.6"

APP="Jellyfin"
APP_CATEGORY="Streaming"
APP_SCOPE="system"
APP_ENABLED="yes"
CONFLICTS="Emby Server"
SUPPORTED_ON="Ubuntu20.04,Ubuntu22.04,Ubuntu24.04"
USE_APACHE2="yes"
MEMORY_K_MIN="4000000"
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

APP_DIRECTORY="/var/lib/jellyfin"
JELLYFIN_REPO_URL="https://repo.jellyfin.org/ubuntu"
JELLYFIN_APT_KEY_URL="https://repo.jellyfin.org/jellyfin_team.gpg.key"
JELLYFIN_APT_SOURCE="/etc/apt/sources.list.d/jellyfin.list"
JELLYFIN_APT_SOURCE_DEB822="/etc/apt/sources.list.d/jellyfin.sources"
JELLYFIN_APT_KEYRING="/etc/apt/keyrings/jellyfin.gpg"

while : ; do

    main_rc=1 

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

    case "${LSB_VENDOR}" in
      "Ubuntu")
          APT_INSTALL "ca-certificates gnupg software-properties-common" || break
          ADD_APT_REPO "${JELLYFIN_REPO_URL}" "${LSB_CODENAME}" "main" \
              "${JELLYFIN_APT_KEY_URL}" "jellyfin" \
              "arch=$( dpkg --print-architecture )" || break
          APT_UPDATE || break
          SVC_UNMASK "jellyfin"
          SYSTEMD_RELOAD
          APT_INSTALL "jellyfin" || break
          if [ -d "/etc/apache2" ] ; then
              RUN_LOG "a2enmod proxy 2>&1"
              RUN_LOG "a2enmod proxy_http 2>&1"
              RUN_LOG "a2enmod proxy_wstunnel 2>&1"
              RUN_LOG "a2enmod headers 2>&1"
              RUN_LOG "a2enmod rewrite 2>&1"
              RUN_LOG "a2enmod remoteip 2>&1"
          fi
          ;;
    esac

    if which "relocate-app-data" > /dev/null 2>&1 ; then
        INFO "Sleeping for 10 seconds ..."
        sleep 10
        RUN_LOG "relocate-app-data -a jellyfin 2>&1"
    fi

    SVC_UNMASK "jellyfin"
    SYSTEMD_RELOAD
    SVC_ENABLE "jellyfin"
    SVC_RESTART "jellyfin"

    main_rc=0 
    break

done


# Cleanup if error
if [ "${main_rc}" -ne 0 ] && [ "${main_rc}" -ne 111 ] && [ "${main_rc}" -ne 117 ] ; then
    _jellyfin_repo_removed=0
    if [ -e "${JELLYFIN_APT_SOURCE}" ] ; then
        RM_FILES "${JELLYFIN_APT_SOURCE}" && _jellyfin_repo_removed=1
    fi
    if [ -e "${JELLYFIN_APT_SOURCE_DEB822}" ] ; then
        RM_FILES "${JELLYFIN_APT_SOURCE_DEB822}" && _jellyfin_repo_removed=1
    fi
    if [ -e "${JELLYFIN_APT_KEYRING}" ] ; then
        RM_FILES "${JELLYFIN_APT_KEYRING}" && _jellyfin_repo_removed=1
    fi
    [ ${_jellyfin_repo_removed} -eq 1 ] && APT_UPDATE
fi
SCRIPTEXIT
