#!/bin/bash
###############################################################################
# Module 05 - Finalisation
# - Vérifications finales sur tous les composants
# - Nettoyage des fichiers temporaires
# - Affichage du rapport final
###############################################################################

set -euo pipefail

log() { echo -e "\033[0;34m[$(date +%H:%M:%S)]\033[0m $*"; }
ok()  { echo -e "\033[0;32m[OK]\033[0m $*"; }
err() { echo -e "\033[0;31m[ERROR]\033[0m $*"; }
warn(){ echo -e "\033[1;33m[WARN]\033[0m $*"; }

echo
echo "============================================================"
echo "  VÉRIFICATIONS FINALES"
echo "============================================================"

# ----------------------------------------------------------------------------
# CT Netbird
# ----------------------------------------------------------------------------
log "CT Netbird (${CT_NETBIRD_ID})..."

if pct status "$CT_NETBIRD_ID" | grep -q running; then
    ok "  Status : running"
else
    err "  Status : not running !"
fi

NB_STATUS=$(pct exec "$CT_NETBIRD_ID" -- netbird status 2>&1 || echo "FAILED")
if echo "$NB_STATUS" | grep -q "Management: Connected"; then
    NB_IP=$(echo "$NB_STATUS" | grep "NetBird IP:" | awk '{print $3}')
    ok "  Netbird : connecté (IP Netbird : ${NB_IP})"
else
    warn "  Netbird : pas connecté au management"
fi

# ----------------------------------------------------------------------------
# CT Dockhand
# ----------------------------------------------------------------------------
log "CT Dockhand (${CT_DOCKHAND_ID})..."

if pct status "$CT_DOCKHAND_ID" | grep -q running; then
    ok "  Status : running"
else
    err "  Status : not running !"
fi

if pct exec "$CT_DOCKHAND_ID" -- docker ps 2>/dev/null | grep -q dockhand; then
    ok "  Container Dockhand : running"
else
    warn "  Container Dockhand : not running"
fi

if curl -fsS --max-time 5 "http://${DOCKHAND_IP}:3000" >/dev/null 2>&1; then
    ok "  Web UI accessible sur http://${DOCKHAND_IP}:3000"
else
    warn "  Web UI pas accessible (peut prendre quelques secondes au démarrage)"
fi

# ----------------------------------------------------------------------------
# VM Mint
# ----------------------------------------------------------------------------
log "VM Mint (${VM_MINT_ID})..."

if qm status "$VM_MINT_ID" | grep -q running; then
    ok "  Status : running"
else
    err "  Status : not running !"
fi

if qm guest cmd "$VM_MINT_ID" ping >/dev/null 2>&1; then
    ok "  qemu-guest-agent : répond"

    # Récupère l'IP réelle (avec || true pour ne pas planter set -e)
    VM_REAL_IP=$(qm guest cmd "$VM_MINT_ID" network-get-interfaces 2>/dev/null \
        | grep -oP '"ip-address":\s*"\K[^"]+' 2>/dev/null \
        | grep -v '^127' 2>/dev/null \
        | grep -v '^::' 2>/dev/null \
        | head -1 || true)
    if [[ -n "$VM_REAL_IP" ]]; then
        ok "  IP réelle : ${VM_REAL_IP}"
        if [[ "$VM_REAL_IP" != "$MINT_IP" ]]; then
            warn "  ⚠ IP réelle (${VM_REAL_IP}) différente de l'IP cible (${MINT_IP})"
            warn "  Cloud-init n'a peut-être pas appliqué la config. Vérifier dans la VM."
        fi
    fi
else
    warn "  qemu-guest-agent : ne répond pas (la VM démarre peut-être encore)"
fi

# ----------------------------------------------------------------------------
# VM NodeZero
# ----------------------------------------------------------------------------
log "VM NodeZero (${VM_NODEZERO_ID})..."

if qm status "$VM_NODEZERO_ID" | grep -q running; then
    ok "  Status : running"
else
    err "  Status : not running !"
fi

if ping -c1 -W2 "$NODEZERO_IP" >/dev/null 2>&1; then
    ok "  IP ${NODEZERO_IP} : répond au ping"
else
    warn "  IP ${NODEZERO_IP} : ne répond pas au ping (peut être encore en boot)"
fi

warn "  NodeZero requiert une configuration MANUELLE via la console :"
warn "    - Password (premier login force le change)"
warn "    - Région Horizon3 (Standard US / GDPR EU / FED-FH)"
warn "    - Token d'enrollment client (portail Horizon3)"

# ----------------------------------------------------------------------------
# Nettoyage
# ----------------------------------------------------------------------------
log "Nettoyage des fichiers temporaires..."
rm -f /tmp/ng-*.sh
rm -f /tmp/ng-debian-template /tmp/ng-debian-template-path
ok "Nettoyage terminé"

# ----------------------------------------------------------------------------
# Note sur l'IP du PVE
# ----------------------------------------------------------------------------
echo
warn "============================================================"
warn "  IMPORTANT : IP DU PVE"
warn "============================================================"
warn "  L'IP du PVE a été modifiée dans /etc/network/interfaces"
warn "  vers ${PVE_IP}/24."
warn ""
warn "  ⚠ Cette nouvelle IP ne sera ACTIVE QU'APRÈS REBOOT du PVE."
warn ""
warn "  Pour appliquer la nouvelle IP, exécute : reboot"
warn "  (Tu seras déconnecté, reconnecte-toi sur https://${PVE_IP}:8006)"
warn "============================================================"

ok "Module 05 (finalisation) terminé"