#!/bin/bash
set -e

# ===================== 配置项区（可根据实际环境修改） =====================
# 默认虚拟机名称（未传参时使用）
DEFAULT_VM_NAME="Windows_11"
# 虚拟机XML文件路径（独立配置）
VM_XML_DESTROY_PATH="/etc/vmdeploy/Windows_11.xml"
# =========================================================================

# 日志函数
log() {
    local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] [INFO] $1"
}

# 参数处理：优先使用传入的虚拟机名称，无参则用默认值
VM_NAME=${1:-$DEFAULT_VM_NAME}

# 主逻辑
log "===== Start destroying VM [$VM_NAME] ====="

# 1. 检查libvirtd服务状态
if ! systemctl is-active --quiet libvirtd; then
    log "libvirtd service is not running, starting before destruction..."
    systemctl start libvirtd
fi

# 2. 检测虚拟机是否存在（解析virsh list --all输出，匹配名称即判定存在）
log "Checking if VM [$VM_NAME] exists (detecting from virsh list --all)"
if virsh list --all | awk 'NR>2 {print $2}' | grep -wq "$VM_NAME"; then
    log "VM [$VM_NAME] exists, executing virsh undefine $VM_NAME"
    # 先强制关闭虚拟机（避免undefine失败），再删除定义
    virsh destroy "$VM_NAME" &> /dev/null || true
    virsh undefine "$VM_NAME" --nvram &> /dev/null
    if [ $? -eq 0 ]; then
        log "VM [$VM_NAME] has been successfully undefined"
    else
        log "Error: Failed to undefine VM [$VM_NAME]"
        exit 1
    fi
else
    log "VM [$VM_NAME] does not exist, skipping undefine"
fi


log "Executing network card restore script /usr/local/bin/netcard_restore"
# 执行脚本，输出重定向避免干扰主流程，失败仅警告不终止
if sh /usr/local/bin/netcard_restore &> /dev/null; then
    log "Network card restore script executed successfully"
else
    log "Warning: Failed to execute network card restore script (script may not exist/execution error), does not affect subsequent processes"
fi


# 3. 删除XML文件（忽略不存在的情况）
log "Checking XML file: $VM_XML_DESTROY_PATH"
if [ -f "$VM_XML_DESTROY_PATH" ]; then
    rm -f "$VM_XML_DESTROY_PATH"
    log "XML file $VM_XML_DESTROY_PATH has been deleted"
else
    log "XML file does not exist, skipping deletion"
fi

\cp -r /etc/vmdeploy/backup/Windows_11.xml /etc/vmdeploy/

log "===== VM destruction script execution completed ====="
echo ">> VM [$VM_NAME] destruction completed (undefined + XML file deleted)"
exit 0
