#!/bin/bash
# =============================================================================
# update_repo.sh — met à jour le dépôt APT reprepro (multi-paquets, signé GPG).
#
# Emplacement : à la RACINE du dépôt reprepro (le dossier qui contient conf/,
# db/, dists/, pool/). Le script détecte automatiquement ce dossier, il marche
# donc aussi bien sur le VPS (/var/www/html/Mawena/mawena/repo) qu'en local.
#
# Usage :
#   ./update_repo.sh                      # intègre tous les .deb de ubuntu/
#   ./update_repo.sh chemin/vers/x.deb    # intègre un .deb précis
#
# reprepro remplace automatiquement une version antérieure du même paquet et
# nettoie l'ancien fichier dans pool/. La signature du dépôt utilise la clé
# « SignWith » définie dans conf/distributions.
#
# Prérequis serveur : sudo apt install reprepro
# =============================================================================
set -euo pipefail

# Base du dépôt = dossier de ce script (contient conf/distributions).
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STAGING="$REPO_DIR/ubuntu"   # dossier de dépôt des .deb à intégrer

# Distribution (Codename dans conf/distributions).
DIST="$(awk -F': *' '/^Codename:/{print $2; exit}' "$REPO_DIR/conf/distributions")"
DIST="${DIST:-stable}"

# Liste des .deb à intégrer : arguments fournis, sinon tous ceux de ubuntu/.
if [ "$#" -gt 0 ]; then
    debs=("$@")
else
    shopt -s nullglob
    debs=("$STAGING"/*.deb)
    shopt -u nullglob
fi

if [ "${#debs[@]}" -eq 0 ]; then
    echo "Aucun .deb à intégrer (ni argument, ni fichier dans $STAGING)."
    exit 0
fi

for deb in "${debs[@]}"; do
    if [ ! -f "$deb" ]; then echo "!! introuvable, ignoré : $deb"; continue; fi
    pkg="$(dpkg-deb -f "$deb" Package)"
    ver="$(dpkg-deb -f "$deb" Version)"

    # Déjà présent dans cette version exacte ? on saute (évite l'erreur reprepro).
    if reprepro -b "$REPO_DIR" list "$DIST" "$pkg" 2>/dev/null | grep -q -- " $ver"; then
        echo "= $pkg $ver déjà présent — ignoré."
        continue
    fi
    echo "-> Intégration de $pkg $ver..."
    reprepro -b "$REPO_DIR" includedeb "$DIST" "$deb"
done

echo
echo "État du dépôt « $DIST » :"
reprepro -b "$REPO_DIR" list "$DIST"
