#!/usr/bin/env bash
# ==============================================================================
# /usr/local/bin/create-homelab-vm.sh
# Proxmox VE Automated VM Provisioner with ID-to-IP Assignment
# Subnet: 192.168.45.0/24 | Isolated Bridge: vmbr1
# ==============================================================================
set -euo pipefail

if [ "$#" -lt 2 ]; then
    echo "======================================================================"
    echo "Usage: $0 <VM_ID> <VM_NAME> [CORES] [RAM_MB] [DISK_GB]"
    echo "Example: $0 105 web-prod-01 4 4096 32"
    echo "======================================================================"
    exit 1
fi

VM_ID="$1"
VM_NAME="$2"
CORES="${3:-2}"
RAM_MB="${4:-2048}"
DISK_GB="${5:-20}"

TARGET_IP="192.168.45.${VM_ID}"
GATEWAY_IP="192.168.45.1"
DNS_SERVERS="1.1.1.1 9.9.9.9"
STORAGE_POOL="local-lvm"
CLOUD_IMAGE_PATH="/var/lib/vz/template/iso/noble-server-cloudimg-amd64.img"

echo "======================================================================"
echo "==> Provisioning Proxmox VM ${VM_ID} (${VM_NAME})..."
echo "==> Assigning Static IP: ${TARGET_IP}/24 via Gateway: ${GATEWAY_IP}"
echo "==> Bridge: vmbr1 (Isolated Workload Switch)"
echo "======================================================================"

# 1. Create VM Shell on isolated workload bridge vmbr1
qm create "$VM_ID" \
    --name "$VM_NAME" \
    --memory "$RAM_MB" \
    --cores "$CORES" \
    --cpu host \
    --net0 virtio,bridge=vmbr1

# 2. Import OS Disk from Cloud-Init image
qm set "$VM_ID" --scsihw virtio-scsi-pci --scsi0 "${STORAGE_POOL}:0,import-from=${CLOUD_IMAGE_PATH}"

# 3. Attach Cloud-Init Drive and serial socket
qm set "$VM_ID" --ide2 "${STORAGE_POOL}:cloudinit" --boot order=scsi0 --serial0 socket --vga serial0

# 4. Resize Root Disk
qm resize "$VM_ID" scsi0 "${DISK_GB}G"

# 5. Inject Cloud-Init Static Networking & DNS
qm set "$VM_ID" \
    --ipconfig0 "ip=${TARGET_IP}/24,gw=${GATEWAY_IP}" \
    --nameserver "$DNS_SERVERS"

echo "==> Starting VM ${VM_ID}..."
qm start "$VM_ID"

echo "======================================================================"
echo "==> VM ${VM_ID} successfully created and online at ${TARGET_IP}"
echo "======================================================================"
