#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster) | Co-Author: remz1337
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/janeczku/calibre-web

# App Default Values
APP="Calibre-Web"
var_tags="eBook"
var_cpu="2"
var_ram="2048"
var_disk="4"
var_os="debian"
var_version="12"
var_unprivileged="1"

# App Output & Base Settings
header_info "$APP"
base_settings

# Core
variables
color
catch_errors

function update_script() {
  header_info
  check_container_storage
  check_container_resources
  if [[ ! -f /etc/systemd/system/cps.service ]]; then
    msg_error "No ${APP} Installation Found!"
    exit
  fi
  msg_info "Stopping ${APP}"
  systemctl stop cps
  msg_ok "Stopped ${APP}"

  msg_info "Updating ${APP}"
  cd /opt/kepubify
  rm -rf kepubify-linux-64bit
  curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit
  chmod +x kepubify-linux-64bit
  menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF \
    "2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF \
    "3" "Enables displaying of additional author infos on the authors page" OFF \
    "4" "Enables login via LDAP server" OFF \
    "5" "Enables login via google or github oauth" OFF \
    "6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF \
    "7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF \
    "8" "Enables syncing with your kobo reader" OFF)
  if [ -f "/opt/calibre-web/options.txt" ]; then
    cps_options="$(cat /opt/calibre-web/options.txt)"
    IFS=',' read -ra ADDR <<<"$cps_options"
    for i in "${ADDR[@]}"; do
      if [ $i == "gdrive" ]; then
        line=0
      elif [ $i == "gmail" ]; then
        line=1
      elif [ $i == "goodreads" ]; then
        line=2
      elif [ $i == "ldap" ]; then
        line=3
      elif [ $i == "oauth" ]; then
        line=4
      elif [ $i == "metadata" ]; then
        line=5
      elif [ $i == "comics" ]; then
        line=6
      elif [ $i == "kobo" ]; then
        line=7
      fi
      array_index=$((3 * line + 2))
      menu_array[$array_index]=ON
    done
  fi
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
  CHOICES=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CALIBRE-WEB OPTIONS" --separate-output --checklist "Choose Additional Options" 15 125 8 "${menu_array[@]}" 3>&1 1>&2 2>&3)
  spinner &
  SPINNER_PID=$!
  options=()
  if [ ! -z "$CHOICES" ]; then
    for CHOICE in $CHOICES; do
      case "$CHOICE" in
      "1")
        options+=(gdrive)
        ;;
      "2")
        options+=(gmail)
        ;;
      "3")
        options+=(goodreads)
        ;;
      "4")
        options+=(ldap)
        apt-get install -qqy libldap2-dev libsasl2-dev
        ;;
      "5")
        options+=(oauth)
        ;;
      "6")
        options+=(metadata)
        ;;
      "7")
        options+=(comics)
        ;;
      "8")
        options+=(kobo)
        ;;
      *)
        echo "Unsupported item $CHOICE!" >&2
        exit 1
        ;;
      esac
    done
  fi
  if [ ${#options[@]} -gt 0 ]; then
    cps_options=$(
      IFS=,
      echo "${options[*]}"
    )
    echo $cps_options >/opt/calibre-web/options.txt
    pip install --upgrade calibreweb[$cps_options] &>/dev/null
  else
    rm -rf /opt/calibre-web/options.txt
    pip install --upgrade calibreweb &>/dev/null
  fi

  msg_info "Starting ${APP}"
  systemctl start cps
  msg_ok "Started ${APP}"
  msg_ok "Updated Successfully"
  exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"