#!/bin/bash
# add-debian-theorganist24.sh
# Adds the TheOrganist24 public Debian package repository.
# Hosted at: https://hosted.courtman.me.uk/scripts/add-debian-theorganist24.sh
# Usage: sudo bash add-debian-theorganist24.sh
set -euo pipefail

REPO_URL="https://debian.theorganist24.co.uk"
KEYRING_URL="${REPO_URL}/theorganist24-archive-keyring.asc"
KEYRING_PATH="/usr/share/keyrings/theorganist24-archive-keyring.gpg"
SOURCES_FILE="/etc/apt/sources.list.d/theorganist24.list"
CODENAME="trixie"
COMPONENT="main"

# ── Helpers ────────────────────────────────────────────────────────────────────

info()    { echo "  [•] $*"; }
success() { echo "  [✓] $*"; }
warn()    { echo "  [!] $*"; }
fail()    { echo "  [✗] $*" >&2; exit 1; }

# ── Preflight ──────────────────────────────────────────────────────────────────

echo
echo "TheOrganist24 Debian Repository Installer"
echo "──────────────────────────────────────────"
echo

if [[ "${EUID}" -ne 0 ]]; then
    fail "This script must be run as root (sudo)."
fi

info "Checking Debian version..."
if ! grep -q "VERSION_CODENAME=${CODENAME}" /etc/os-release 2>/dev/null; then
    CURRENT_CODENAME=$(. /etc/os-release && echo "${VERSION_CODENAME:-unknown}")
    fail "This repository requires Debian ${CODENAME}. Detected: ${CURRENT_CODENAME}."
fi
success "Debian ${CODENAME} detected."

# ── Dependencies ───────────────────────────────────────────────────────────────

info "Checking dependencies..."
for cmd in curl gpg; do
    if ! command -v "${cmd}" &>/dev/null; then
        info "Installing ${cmd}..."
        apt-get install -y "${cmd}" >/dev/null
    fi
done
success "Dependencies satisfied."

# ── GPG Keyring ────────────────────────────────────────────────────────────────

info "Fetching GPG keyring..."
TMPKEY=$(mktemp)
trap 'rm -f "${TMPKEY}"' EXIT

if ! curl -fsSL "${KEYRING_URL}" -o "${TMPKEY}"; then
    fail "Could not fetch keyring from ${KEYRING_URL}."
fi

TMPGPG=$(mktemp)
gpg --dearmor < "${TMPKEY}" > "${TMPGPG}"

if [[ -f "${KEYRING_PATH}" ]] && cmp -s "${TMPGPG}" "${KEYRING_PATH}"; then
    success "GPG keyring already installed and up to date."
else
    cp "${TMPGPG}" "${KEYRING_PATH}"
    chmod 644 "${KEYRING_PATH}"
    if [[ -f "${KEYRING_PATH}" ]]; then
        success "GPG keyring updated."
    else
        success "GPG keyring installed."
    fi
fi
rm -f "${TMPGPG}"

# ── Sources Entry ──────────────────────────────────────────────────────────────

SOURCES_LINE="deb [signed-by=${KEYRING_PATH}] ${REPO_URL} ${CODENAME} ${COMPONENT}"

info "Configuring apt sources..."
if [[ -f "${SOURCES_FILE}" ]] && grep -qF "${SOURCES_LINE}" "${SOURCES_FILE}"; then
    success "Sources entry already present."
else
    echo "${SOURCES_LINE}" > "${SOURCES_FILE}"
    success "Sources entry written to ${SOURCES_FILE}."
fi

# ── Update ─────────────────────────────────────────────────────────────────────

info "Running apt update..."
apt-get update -o Dir::Etc::sourcelist="${SOURCES_FILE}" \
               -o Dir::Etc::sourceparts="-" \
               -o APT::Get::List-Cleanup="0" 2>&1 | grep -E "(Hit|Get|Ign|Err).*theorganist24" || true
success "Repository index updated."

echo
echo "Done. The TheOrganist24 repository is ready to use."
echo "Install packages with: sudo apt install <package>"
echo
