#!/bin/bash
#
# shellcheck disable=SC1091,SC2086
#
# @license   http://www.gnu.org/licenses/gpl.html GPL Version 3
# @author    OpenMediaVault Plugin Developers <plugins@omv-extras.org>
# @copyright Copyright (c) 2015-2026 openmediavault plugin developers
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

. /etc/default/openmediavault
. /usr/share/openmediavault/scripts/helper-functions
. /usr/share/openmediavault/sysinfo/functions

declare -i i=0

OMV_APT_KERNEL_BACKPORTS_PINPRIORITY=${OMV_APT_KERNEL_BACKPORTS_PINPRIORITY:-500}

export LC_ALL=C

((i++))
echo "${i}. Cleaning apt cache files..."
/usr/bin/apt-get clean

((i++))
echo -e "\n${i}. Clearing available dpkg packages..."
/usr/bin/dpkg --clear-avail 2>/dev/null

((i++))
echo -e "\n${i}. Removing apt lists..."
rm -rfv /var/lib/apt/lists/*

((i++))
echo -e "\n${i}. Removing OpenMediaVault cache packages..."
rm -fv /var/cache/openmediavault/archives/*

((i++))
echo -e "\n${i}. Creating new OpenMediaVault packages file..."
touch /var/cache/openmediavault/archives/Packages

# add repos
if [ "${1}" = "repos" ]; then

  arch="$(dpkg --print-architecture)"
  backports=${OMV_APT_USE_KERNEL_BACKPORTS:-"yes"}
  docker=$(omv_config_get "/config/system/omvextras/docker")
  dist="$(lsb_release --codename --short)"
  omv_codename=$(omv_product_info "versionname")

  repo_url=${OMV_EXTRAS_APT_REPOSITORY_URL:-"https://openmediavault-plugin-developers.github.io/packages/debian"}
  key_url=${OMV_EXTRAS_KEY_URL:-"https://openmediavault-plugin-developers.github.io/packages/debian/omvextras2030.gpg"}
  docker_url=${OMV_DOCKER_APT_REPOSITORY_URL:-"https://download.docker.com/linux/debian"}
  docker_key_url=${OMV_DOCKER_KEY_URL:-"https://download.docker.com/linux/debian/gpg"}

  key="/usr/share/keyrings/omvextras.gpg"
  docker_key="/usr/share/keyrings/docker.gpg"
  list="/etc/apt/sources.list.d/omvextras.sources"
  docker_list="/etc/apt/sources.list.d/omvdocker.sources"
  pref="/etc/apt/preferences.d/omvextras.pref"

  ((i++))
  echo -e "\n${i}. Remove old omv-extras apt list files..."
  grep -l 'openmediavault-plugin-developers' /etc/apt/sources.list.d/* | sudo xargs -r rm -fv
  rm -fv /etc/apt/keyrings/docker.gpg

  ((i++))
  echo -e "\n${i}. Adding omv-extras repo and key..."
  mkdir -pv "$(dirname ${key})"
  echo -e "Types: deb\nURIs: ${repo_url}\nSuites: ${omv_codename,,}\nComponents: main\nSigned-By: ${key}" > ${list}
  wget --quiet --output-document=- "${key_url}" | gpg --dearmor > "${key}"
  chmod 644 ${list} ${key}

  # backports pinning
  rm -f ${pref}
  if omv_checkyesno ${backports}; then
    ((i++))
    echo -e "\n${i}. Adding backports pinning..."
    pkgs=("src:zfs-linux" "libvirt*" "qemu*" "seabios")
    for ((j=0; j<${#pkgs[@]}; j++)); do
      echo -e "Package: ${pkgs[j]}\nPin: release n=${dist}-backports\nPin-Priority: ${OMV_APT_KERNEL_BACKPORTS_PINPRIORITY}\n" >> ${pref}
    done
    chmod 644 ${pref}
  fi

  # docker repo
  grep -l 'docker' /etc/apt/sources.list.d/* | sudo xargs -r rm -fv
  if omv_checkyesno ${docker}; then
    ((i++))
    echo -e "\n${i}. Adding docker repo and key..."
    echo -e "Types: deb\nURIs: ${docker_url}\nSuites: ${dist,,}\nComponents: stable\nSigned-By: ${docker_key}" > ${docker_list}
    wget --quiet --output-document=- "${docker_key_url}" | gpg --dearmor > "${docker_key}"
    chmod 644 ${docker_list} ${docker_key}
  fi
fi

((i++))
echo -e "\n${i}. Updating apt..."
/usr/bin/apt-get update

((i++))
echo -e "\n${i}. Saving current package list..."
packages="/var/cache/openmediavault/currently_installed_packages.list"
/usr/bin/dpkg -l | awk '$1 == "ii" { print $2 "=" $3 " \\"}' > ${packages}

((i++))
echo -e "\n${i}. Updating plugin index..."
/usr/sbin/omv-mkaptidx

exit 0
