#!/bin/bash

# Vérification des privilèges root
if [ "$(id -u)" -ne 0 ]; then
    echo "Ce script doit être exécuté en tant que root."
    exit 1
fi

# Fonction pour générer un menu interactif
select_storage() {
    local storages=($(pvesm status | awk '/images/ {print $1}'))
    echo "Sélectionnez un stockage disponible pour les disques de la VM :"
    
    PS3="Choisissez une option (1-${#storages[@]}): "
    select choice in "${storages[@]}"; do
        if [[ -n "$choice" ]]; then
            echo "$choice"
            return
        else
            echo "Option invalide. Veuillez réessayer."
        fi
    done
}

# Récupération des paramètres utilisateur
read -p "Nom de la VM : " VM_NAME
read -p "ID de la VM : " VM_ID

# Choix du stockage pour l'ISO
read -p "Nom du stockage contenant l'ISO (ex : local) : " ISO_STORAGE
ISO_PATH="/var/lib/vz/template/iso/debian-12.7.0-amd64-netinst.iso"
echo "Chemin ISO par défaut : $ISO_PATH"
read -p "Utiliser ce chemin pour l'ISO ? (y/n) : " USE_DEFAULT_ISO

if [[ "$USE_DEFAULT_ISO" != "y" ]]; then
    read -p "Chemin complet de l'ISO dans le stockage $ISO_STORAGE : " ISO_PATH
fi

# Sélection du stockage pour le disque de la VM
VM_STORAGE=$(select_storage)
echo "Stockage sélectionné : $VM_STORAGE"

read -p "Taille du disque (en Go) : " DISK_SIZE

# Autres paramètres
read -p "RAM (en Mo) : " RAM
read -p "Nombre de CPU : " CPU
read -p "Réseau (ex : vmbr0) : " BRIDGE
read -p "Adresse MAC (laisser vide pour auto) : " MAC

if [[ -z "$MAC" ]]; then
    MAC_PARAM=""
else
    MAC_PARAM=",macaddr=$MAC"
fi

# Création de la VM
echo "Création de la VM..."
qm create $VM_ID --name $VM_NAME --memory $RAM --cores $CPU --net0 virtio,bridge=$BRIDGE$MAC_PARAM --scsihw virtio-scsi-pci --serial0 socket --boot order=scsi0 --ostype l26

# Ajout de l'ISO
qm set $VM_ID --ide2 $ISO_STORAGE:iso/${ISO_PATH##*/},media=cdrom

# Ajout du disque avec vérification du stockage
if pvesm status | grep -q "^$VM_STORAGE.*images"; then
    qm set $VM_ID --scsi0 $VM_STORAGE:vm-$VM_ID-disk-0,size=${DISK_SIZE}G,iothread=1
else
    echo "Le stockage $VM_STORAGE n'est pas configuré correctement pour les disques VM."
    exit 1
fi

if [ $? -ne 0 ]; then
    echo "Erreur lors de la création de la VM. Veuillez vérifier les paramètres."
    exit 1
fi

echo "Configuration de la VM $VM_NAME terminée."


# Installation automatisée de Debian
read -p "Souhaitez-vous démarrer la VM et configurer automatiquement Debian ? (y/n) : " AUTO_INSTALL
if [[ "$AUTO_INSTALL" == "y" ]]; then
    qm start $VM_ID
    echo "VM $VM_NAME démarrée."

    echo "Attente de la configuration..."
    sleep 30 # Ajustez ce délai si nécessaire

    # Exemple de personnalisation : modification de fichiers
    echo "Personnalisation de la VM..."
    
    # Configuration de la langue et du clavier en français
    qm guest exec $VM_ID -- bash -c "apt update && apt install -y locales console-setup"
    qm guest exec $VM_ID -- bash -c "locale-gen fr_FR.UTF-8 && update-locale LANG=fr_FR.UTF-8"
    qm guest exec $VM_ID -- bash -c "echo 'KEYMAP=fr' > /etc/default/keyboard && dpkg-reconfigure -f noninteractive keyboard-configuration"

    # Installation minimale : serveur SSH et serveur web (apache2)
    qm guest exec $VM_ID -- bash -c "apt install -y openssh-server apache2"
    qm guest exec $VM_ID -- bash -c "systemctl enable ssh && systemctl enable apache2"

    # Application de la configuration réseau
    if [[ "$STATIC_IP" == "y" ]]; then
        qm guest exec $VM_ID -- bash -c "cat > /etc/network/interfaces <<EOF
auto lo
iface lo inet loopback

auto ens18
iface ens18 inet static
    address $IP_ADDRESS
    netmask $NETMASK
    gateway $GATEWAY
    dns-nameservers $DNS
EOF
"
        qm guest exec $VM_ID -- bash -c "systemctl restart networking"
    else
        echo "L'IP sera obtenue via DHCP."
    fi

    echo "Personnalisation terminée."
fi

echo "Script terminé."
