#!/usr/bin/env bash
set -euo pipefail

VM_NAME="${1:-}"

IMAGE_DIR="/var/lib/libvirt/images"
CLOUDINIT_DIR="/var/lib/libvirt/cloudinit"

usage() {
    echo "用法: $0 <vm-name>"
    echo "示例: $0 dt4124-vm-1"
    exit 1
}

if [ -z "$VM_NAME" ]; then
    usage
fi

echo ">>> 准备彻底删除虚拟机: $VM_NAME"

if ! virsh dominfo "$VM_NAME" >/dev/null 2>&1; then
    echo "提示: libvirt 中不存在虚拟机: $VM_NAME"
else
    STATE="$(virsh domstate "$VM_NAME" 2>/dev/null || true)"

    if [ "$STATE" != "shut off" ]; then
        echo ">>> 虚拟机正在运行，尝试关闭"
        virsh shutdown "$VM_NAME" >/dev/null 2>&1 || true

        for i in $(seq 1 15); do
            sleep 1
            STATE="$(virsh domstate "$VM_NAME" 2>/dev/null || true)"
            if [ "$STATE" = "shut off" ]; then
                break
            fi
        done

        STATE="$(virsh domstate "$VM_NAME" 2>/dev/null || true)"
        if [ "$STATE" != "shut off" ]; then
            echo ">>> 正常关闭失败，强制关闭"
            virsh destroy "$VM_NAME" >/dev/null 2>&1 || true
        fi
    fi

    echo ">>> 收集虚拟机磁盘文件"
    DISKS="$(virsh domblklist "$VM_NAME" --details 2>/dev/null | awk '$3=="disk"{print $4}' || true)"
    CDROMS="$(virsh domblklist "$VM_NAME" --details 2>/dev/null | awk '$3=="cdrom"{print $4}' || true)"

    echo ">>> undefine 虚拟机"
    virsh undefine "$VM_NAME" --remove-all-storage --nvram >/dev/null 2>&1 || \
    virsh undefine "$VM_NAME" --remove-all-storage >/dev/null 2>&1 || \
    virsh undefine "$VM_NAME" --nvram >/dev/null 2>&1 || \
    virsh undefine "$VM_NAME" >/dev/null 2>&1 || true

    echo ">>> 删除磁盘文件"
    for f in $DISKS; do
        if [ -n "$f" ] && [ -f "$f" ]; then
            echo "删除: $f"
            rm -f "$f"
        fi
    done

    echo ">>> 删除 cloud-init ISO"
    for f in $CDROMS; do
        if [ -n "$f" ] && [ -f "$f" ]; then
            echo "删除: $f"
            rm -f "$f"
        fi
    done
fi

echo ">>> 删除脚本默认路径残留"

rm -f "${IMAGE_DIR}/${VM_NAME}.qcow2"
rm -rf "${CLOUDINIT_DIR}/${VM_NAME}"

rm -f "/var/lib/libvirt/qemu/nvram/${VM_NAME}_VARS.fd"
rm -f "/var/lib/libvirt/qemu/nvram/${VM_NAME}.fd"

echo ">>> 检查是否仍有残留"

virsh dominfo "$VM_NAME" >/dev/null 2>&1 && {
    echo "警告: 虚拟机仍存在，请手动检查:"
    echo "virsh dominfo $VM_NAME"
    exit 1
} || true

echo ">>> 删除完成: $VM_NAME"
