#!/bin/bash
###############################################################################
# Module 04 - VM Mint
# - Télécharge le vzdump du template Mint XFCE
# - Restaure la VM avec l'ID 100
# - Fix : déconvertit le template + rename LV base- → vm- + active + writable
# - Configure cloud-init avec l'IP cliente
# - Démarre la VM
###############################################################################

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

VM_ID="${VM_MINT_ID}"
VM_NAME="mint-${CLIENT_NAME,,}-${SITE_NAME,,}"
VM_NAME=$(echo "$VM_NAME" | tr -cs 'a-z0-9-' '-' | sed 's/^-//;s/-$//')

TEMPLATE_URL="${BASE_URL}/templates/mint-xfce-v1.vma.zst"
TEMPLATE_LOCAL="/var/lib/vz/dump/vzdump-qemu-${VM_ID}-mint-xfce-v1.vma.zst"

# ----------------------------------------------------------------------------
# Téléchargement du template
# ----------------------------------------------------------------------------
log "Téléchargement du template Mint XFCE..."
log "URL : ${TEMPLATE_URL}"

mkdir -p /var/lib/vz/dump

if ! wget --progress=dot:giga -O "$TEMPLATE_LOCAL" "$TEMPLATE_URL"; then
    err "Échec du téléchargement du template"
    exit 1
fi

TEMPLATE_SIZE=$(du -h "$TEMPLATE_LOCAL" | cut -f1)
ok "Template téléchargé (${TEMPLATE_SIZE})"

# ----------------------------------------------------------------------------
# Restauration de la VM
# ----------------------------------------------------------------------------
log "Restauration de la VM ${VM_ID} depuis le template..."

qmrestore "$TEMPLATE_LOCAL" "$VM_ID" --storage "$STORAGE" --unique 1

ok "VM ${VM_ID} restaurée"

# ----------------------------------------------------------------------------
# Fix : qmrestore d'un template recrée la VM en mode template avec disque
# read-only et LV non-actif. On rectifie tout.
# ----------------------------------------------------------------------------
log "Conversion du template restauré en VM utilisable..."

# Déconvertir le mode template
qm set "$VM_ID" --template 0 >/dev/null 2>&1 || true

# Tester l'existence du LV via lvs (pas via symlink qui n'existe pas toujours)
if lvs "pve/base-${VM_ID}-disk-0" >/dev/null 2>&1; then
    log "  Renommage du LV base-${VM_ID}-disk-0 → vm-${VM_ID}-disk-0..."
    lvrename "pve/base-${VM_ID}-disk-0" "vm-${VM_ID}-disk-0"

    log "  Activation du LV (thin pristine)..."
    lvchange -ay "pve/vm-${VM_ID}-disk-0"

    log "  Marquage du LV en writable..."
    lvchange -p rw "pve/vm-${VM_ID}-disk-0"

    log "  Mise à jour de la config VM..."
    sed -i "s/base-${VM_ID}-disk-/vm-${VM_ID}-disk-/g" "/etc/pve/qemu-server/${VM_ID}.conf"

    ok "Disque converti : base- → vm- (actif, writable)"
else
    warn "  LV base-${VM_ID}-disk-0 introuvable, on continue (peut-être déjà en vm-)"
fi

# ----------------------------------------------------------------------------
# Configuration de la VM
# ----------------------------------------------------------------------------
log "Configuration de la VM..."

qm set "$VM_ID" --name "$VM_NAME" >/dev/null
qm set "$VM_ID" --description "Linux Mint XFCE - ${CLIENT_NAME} / ${SITE_NAME}" >/dev/null
qm set "$VM_ID" --onboot 1 >/dev/null

# Configuration cloud-init pour l'IP
log "Configuration de cloud-init avec l'IP ${MINT_IP}..."

if ! qm config "$VM_ID" | grep -q "ide2.*cloudinit"; then
    log "Ajout d'un disque cloud-init..."
    qm set "$VM_ID" --ide2 "${STORAGE}:cloudinit" >/dev/null
fi

qm set "$VM_ID" --ipconfig0 "ip=${MINT_IP}/24,gw=${GATEWAY}" >/dev/null
qm set "$VM_ID" --nameserver "1.1.1.1 8.8.8.8" >/dev/null
qm set "$VM_ID" --ciuser "ngadmin" --cipassword "$NGADMIN_PASS" >/dev/null

ok "Cloud-init configuré"

# ----------------------------------------------------------------------------
# Démarrage de la VM
# ----------------------------------------------------------------------------
log "Démarrage de la VM ${VM_ID}..."
qm start "$VM_ID"

log "Attente du démarrage (peut prendre 1-2 min pour le premier boot)..."

for i in {1..60}; do
    if qm guest cmd "$VM_ID" ping >/dev/null 2>&1; then
        ok "VM démarrée et qemu-guest-agent répond"
        break
    fi
    if [[ $i -eq 60 ]]; then
        warn "qemu-guest-agent ne répond pas après 2 min"
        warn "La VM démarre peut-être encore. Vérifie via la console noVNC."
        break
    fi
    sleep 2
done

# ----------------------------------------------------------------------------
# Récap
# ----------------------------------------------------------------------------
echo
ok "VM Mint déployée : ${VM_NAME} (ID ${VM_ID})"
log "IP : ${MINT_IP}"
log "User : ngadmin"
log "Le service install-screenconnect.service va s'exécuter au premier boot"
log "et installer ScreenConnect dans le group 'onboarding mint'."

ok "Module 04 (VM Mint) terminé"