#!/bin/bash
set -e

OWNER="geronzi"
REPO="full_updater"
TOKEN_FILE="/etc/full-updater/token"
INSTALLED_VERSION=$(dpkg -s full-updater 2>/dev/null | grep "^Version:" | awk '{print $2}' || echo "0.0.0")

# Détecter si on est sur le réseau interne (host Proxmox ou LXC)
# et utiliser l'IP interne de Forgejo si c'est le cas (NAT loopback)
if curl -s --max-time 2 "http://10.0.0.4:3000/api/v1/repos/${OWNER}/${REPO}/releases/latest" > /dev/null 2>&1; then
    REPO_URL="http://10.0.0.4:3000"
    echo "=== Full Updater Update (mode interne) ==="
else
    REPO_URL="https://git.geronzi.fr"
    echo "=== Full Updater Update ==="
fi

echo "Version installée : ${INSTALLED_VERSION}"

# Build API headers
HEADERS=(-H "Content-Type: application/json")
if [ -f "$TOKEN_FILE" ]; then
    TOKEN=$(cat "$TOKEN_FILE" | tr -d '[:space:]')
    HEADERS+=("-H" "Authorization: token ${TOKEN}")
fi

# Fetch latest release
API_URL="${REPO_URL}/api/v1/repos/${OWNER}/${REPO}/releases/latest"
echo "Recherche de la dernière release..."

RESPONSE=$(curl -s -L "${HEADERS[@]}" "$API_URL")
if [ -z "$RESPONSE" ] || echo "$RESPONSE" | grep -q "Not Found"; then
    echo "Erreur : impossible de récupérer la dernière release."
    echo "Vérifiez l'URL : $API_URL"
    echo "Pour un repo privé, créez /etc/full-updater/token avec un token d'accès Forgejo."
    exit 1
fi

LATEST_TAG=$(echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('tag_name',''))")
if [ -z "$LATEST_TAG" ]; then
    echo "Erreur : aucune release trouvée."
    exit 1
fi

LATEST_VERSION=${LATEST_TAG#v}
echo "Dernière version    : ${LATEST_VERSION}"

if [ "$INSTALLED_VERSION" = "$LATEST_VERSION" ]; then
    echo "✅ Full Updater est déjà à jour (${INSTALLED_VERSION})."
    exit 0
fi

# Find .deb asset
ASSET_URL=$(echo "$RESPONSE" | python3 -c "
import sys, json
d = json.load(sys.stdin)
for a in d.get('assets', []):
    if a['name'].endswith('.deb'):
        print(a['browser_download_url'])
        break
")

if [ -z "$ASSET_URL" ]; then
    echo "Erreur : aucun fichier .deb trouvé dans la release ${LATEST_TAG}."
    exit 1
fi

# Si on est en mode interne, remplacer l'URL publique par l'URL interne dans le download
if [ "$REPO_URL" = "http://10.0.0.4:3000" ]; then
    ASSET_URL=$(echo "$ASSET_URL" | sed 's|https://git.geronzi.fr|http://10.0.0.4:3000|g')
fi

TMP_DEB="/tmp/full-updater-${LATEST_VERSION}.deb"
echo "Téléchargement de ${ASSET_URL}..."
curl -s -L -o "$TMP_DEB" "${HEADERS[@]}" "$ASSET_URL"

echo "Installation..."
dpkg -i "$TMP_DEB"
apt-get install -f -y
rm -f "$TMP_DEB"

echo "✅ Mise à jour terminée : ${INSTALLED_VERSION} → ${LATEST_VERSION}"
