#!/bin/bash
###############################################################################
# Module 02 - CT Netbird
# - Crée un CT Debian 12
# - Installe Netbird
# - Joint le management server avec le setup key
# - Configure le CT pour démarrer au boot
###############################################################################

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 $*"; }

CT_ID="${CT_NETBIRD_ID}"
CT_HOSTNAME="netbird-${CLIENT_NAME,,}-${SITE_NAME,,}"
# Sanitize hostname (alphanumeric + hyphens only)
CT_HOSTNAME=$(echo "$CT_HOSTNAME" | tr -cs 'a-z0-9-' '-' | sed 's/^-//;s/-$//')

TEMPLATE_PATH=$(cat /tmp/ng-debian-template-path)

# ----------------------------------------------------------------------------
# Création du CT
# ----------------------------------------------------------------------------
log "Création du CT ${CT_ID} (Netbird)..."

pct create "$CT_ID" "$TEMPLATE_PATH" \
    --hostname "$CT_HOSTNAME" \
    --cores "$CT_NETBIRD_CORES" \
    --memory "$CT_NETBIRD_RAM" \
    --swap 256 \
    --rootfs "${STORAGE}:${CT_NETBIRD_DISK}" \
    --net0 "name=eth0,bridge=vmbr0,ip=${NETBIRD_IP}/24,gw=${GATEWAY}" \
    --nameserver "1.1.1.1 8.8.8.8" \
    --password "$ROOT_PASS" \
    --features "nesting=1,keyctl=1" \
    --onboot 1 \
    --start 0 \
    --unprivileged 0 \
    --description "Netbird routing peer - ${CLIENT_NAME} / ${SITE_NAME}"

ok "CT ${CT_ID} créé"

# ----------------------------------------------------------------------------
# Configuration pour TUN/WireGuard (nécessaire pour Netbird)
# ----------------------------------------------------------------------------
log "Configuration TUN pour WireGuard..."

cat >> "/etc/pve/lxc/${CT_ID}.conf" <<EOF
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net dev/net none bind,create=dir
EOF

ok "Configuration TUN ajoutée"

# ----------------------------------------------------------------------------
# Démarrage du CT
# ----------------------------------------------------------------------------
log "Démarrage du CT ${CT_ID}..."
pct start "$CT_ID"

# Attendre que le CT soit prêt
log "Attente du démarrage complet..."
for i in {1..30}; do
    if pct exec "$CT_ID" -- ping -c1 -W2 1.1.1.1 >/dev/null 2>&1; then
        ok "CT démarré et connecté"
        break
    fi
    if [[ $i -eq 30 ]]; then
        err "Le CT ne répond pas après 60s"
        exit 1
    fi
    sleep 2
done

# ----------------------------------------------------------------------------
# Installation de Netbird dans le CT
# ----------------------------------------------------------------------------
log "Mise à jour APT dans le CT..."
pct exec "$CT_ID" -- bash -c "apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y -qq" >/dev/null

log "Installation des prérequis..."
pct exec "$CT_ID" -- bash -c "apt-get install -y -qq curl ca-certificates gnupg" >/dev/null

log "Installation de Netbird..."
pct exec "$CT_ID" -- bash -c "curl -fsSL https://pkgs.netbird.io/install.sh | sh" 2>&1 | tail -5

ok "Netbird installé dans le CT"

# ----------------------------------------------------------------------------
# Configuration et jointure Netbird
# ----------------------------------------------------------------------------
log "Jointure du management Netbird..."

# Note: --disable-profiles et --disable-update-settings empêchent les modifications
# locales du client (verrouillage de la config)
pct exec "$CT_ID" -- bash -c "netbird up \
    --setup-key '${NB_SETUP_KEY}' \
    --management-url '${NB_MGMT_URL}' \
    --hostname '${CT_HOSTNAME}'" 2>&1 | tail -10

# Vérification
sleep 5
NB_STATUS=$(pct exec "$CT_ID" -- netbird status 2>&1 || echo "FAILED")

if echo "$NB_STATUS" | grep -q "Management: Connected"; then
    ok "Netbird connecté au management"
else
    err "Netbird ne semble pas connecté. Status:"
    echo "$NB_STATUS"
    echo
    echo "Le CT a été créé mais la jointure Netbird a échoué."
    echo "Pour debug : pct enter ${CT_ID} puis netbird status"
    # On n'exit pas pour permettre de continuer le déploiement
fi

ok "Module 02 (CT Netbird) terminé"
