#!/usr/bin/env bash
#
# Prints the versions of the packages currently in our Linux repositories.

set -eu

function usage() {
    echo "Usage: $0 [options]"
    echo ""
    echo "Example usage: $0 --rpm --production --beta"
    echo
    echo "Options:"
    echo "  -h | --help			Show this help message and exit."
    echo "  -v | --verbose		Print stderr of all commands."
    echo "  -vv				Print both stderr and stdout of all commands."
    echo "  --deb				Check version of deb package (default)."
    echo "  --rpm				Check version of rpm package (default)."
    echo "  --production | --prod		Check packages in production repositories (default)."
    echo "  --staging			Check packages in staging repositories."
    echo "  --development | --dev		Check packages in development repositories."
    echo "  --stable			Check packages in stable repositories (default)."
    echo "  --beta			Check packages in beta repositories."
    exit 1
}

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "$SCRIPT_DIR"

# shellcheck source=ci/linux-repository-builder/build-linux-repositories-config.sh
source ../../../ci/linux-repository-builder/build-linux-repositories-config.sh
# shellcheck source=scripts/utils/log
source ../../../scripts/utils/log

deb="false"
rpm="false"
repository_server_public_url="$PRODUCTION_LINUX_REPOSITORY_PUBLIC_URL"
release_channel="stable"

silent_stdout=">/dev/null"
silent_stderr="2>/dev/null"

while [[ "$#" -gt 0 ]]; do
    case $1 in
        -h|--help) usage;;
        -v|--verbose) silent_stderr="" ;;
        -vv)
            silent_stdout=""
            silent_stderr=""
            ;;
        --deb) deb="true";;
        --rpm) rpm="true";;
        --production|--prod) repository_server_public_url="$PRODUCTION_LINUX_REPOSITORY_PUBLIC_URL";;
        --staging) repository_server_public_url="$STAGING_LINUX_REPOSITORY_PUBLIC_URL";;
        --development|--dev) repository_server_public_url="$DEV_LINUX_REPOSITORY_PUBLIC_URL";;
        --stable) release_channel="stable";;
        --beta) release_channel="beta";;
        *)
            log_error "Unknown parameter: $1\n"
            usage
            ;;
    esac
    shift
done

if [[ $deb == "false" && $rpm == "false" ]]; then
    deb="true";
    rpm="true";
fi

if [[ $deb == "true" ]]; then
    if [[ $rpm == "true" ]]; then
        log_header "deb"
    fi

    bash -c "podman run --rm -i debian:12 sh $silent_stderr" <<SCRIPT
apt update $silent_stderr $silent_stdout
apt install -y curl $silent_stderr $silent_stdout
curl -fsSLo /usr/share/keyrings/mullvad-keyring.asc $repository_server_public_url/deb/mullvad-keyring.asc
echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=amd64,arm64] $repository_server_public_url/deb/$release_channel $release_channel main" > /etc/apt/sources.list.d/mullvad.list
# Add arm64 architecture to enable listing packages for both amd64 and arm64
dpkg --add-architecture arm64
apt update $silent_stderr $silent_stdout
apt list mullvad-* $silent_stderr | grep -E 'amd64|arm64'
SCRIPT
fi

if [[ $rpm == "true" ]]; then
    if [[ $deb == "true" ]]; then
        log_header "rpm"
    fi

    bash -c "podman run --rm -i fedora:43 sh $silent_stderr" <<SCRIPT
dnf install -y 'dnf-command(config-manager)' $silent_stderr $silent_stdout
dnf config-manager addrepo --from-repofile=$repository_server_public_url/rpm/$release_channel/mullvad.repo $silent_stderr
# Replace \$basearch with explicit architectures to list packages for both x86_64 and aarch64
# regardless of which platform this script runs on.
sed 's/\$basearch/x86_64/g; s/\[mullvad/[mullvad-x86_64/' /etc/yum.repos.d/mullvad.repo > /etc/yum.repos.d/mullvad-x86_64.repo
sed 's/\$basearch/aarch64/g; s/\[mullvad/[mullvad-aarch64/' /etc/yum.repos.d/mullvad.repo > /etc/yum.repos.d/mullvad-aarch64.repo
rm /etc/yum.repos.d/mullvad.repo
dnf list --refresh mullvad-* $silent_stderr | grep -E 'x86_64|aarch64'
SCRIPT
fi
