#!/bin/bash
# 文件名: del_vm.sh
# 功能: 从远程 ip.txt 并发删除对应 VM（含手动确认）

REMOTE_URL="https://pan.halocloud.net/?f=/HGC/ip.txt"
THREADS=10  # 并发线程数
TMP_IP_FILE="/tmp/ip_list_$$.txt"

# 下载 IP 列表
echo "🌐 正在从远程获取 IP 列表..."
if ! curl -fsSL "$REMOTE_URL" -o "$TMP_IP_FILE"; then
    echo "❌ 无法下载 IP 列表: $REMOTE_URL"
    exit 1
fi

if [ ! -s "$TMP_IP_FILE" ]; then
    echo "❌ IP 列表为空"
    exit 1
fi

# 显示前几行供人工确认
echo "✅ 已成功下载 IP 列表:"
echo "----------------------------------"
nl -w2 -s'  ' "$TMP_IP_FILE" | head -n 20
if [ "$(wc -l < "$TMP_IP_FILE")" -gt 20 ]; then
    echo "...（共 $(wc -l < "$TMP_IP_FILE") 行，仅显示前 20 行）"
fi
echo "----------------------------------"
read -rp "是否确认以上 IP 列表无误并继续删除？(y/N): " CONFIRM
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
    echo "🚫 已取消操作。"
    rm -f "$TMP_IP_FILE"
    exit 0
fi

# 删除单个 VM 的函数
delete_vm() {
    local IPADDR="$1"
    [ -z "$IPADDR" ] && return

    VMNAME=$(echo "$IPADDR" | sed -E 's/\.[0-9]+$/.0/')
    VMID=$(qm list | awk -v name="$VMNAME" '$2 == name {print $1}')

    if [ -n "$VMID" ]; then
        STATE=$(qm status "$VMID" | awk '{print $2}')
        if [ "$STATE" = "running" ]; then
            echo "停止 VM: $VMNAME (VMID: $VMID)..."
            qm stop "$VMID" >/dev/null 2>&1
            while [ "$(qm status "$VMID" | awk '{print $2}')" = "running" ]; do
                sleep 1
            done
        fi
        echo "删除 VM: $VMNAME (VMID: $VMID)"
        qm destroy "$VMID" --purge >/dev/null 2>&1
    else
        echo "未找到 VM: $VMNAME"
    fi
}

export -f delete_vm

# 并发执行
if command -v parallel >/dev/null 2>&1; then
    parallel --will-cite -j "$THREADS" delete_vm :::: "$TMP_IP_FILE"
else
    i=0
    while IFS= read -r IPADDR || [ -n "$IPADDR" ]; do
        delete_vm "$IPADDR" &
        ((i++))
        (( i % THREADS == 0 )) && wait
    done < "$TMP_IP_FILE"
    wait
fi

rm -f "$TMP_IP_FILE"
echo "✅ 执行完毕"
