#!/bin/bash

# 此脚本为指定的网卡设置静态 IP
# IP: 192.168.121.20/24
# 网关: 192.168.121.1
# DNS: 192.168.121.1
# 在 /etc/netplan/ 下新增文件 30-cotti.yaml 并应用配置
# 需要 root 权限运行（推荐使用 sudo）

set -e  # 遇到错误立即退出

# 查找所有非 lo 的以太网接口
mapfile -t INTERFACES < <(ip -o link show | awk -F': ' '/state UP|state DOWN/ && $2 !~ /lo/ {print $2}')

if [ ${#INTERFACES[@]} -eq 0 ]; then
    echo "错误：未找到任何可用网卡！"
    exit 1
fi

# 优先尝试自动选择以 enp 开头的网卡
INTERFACE=""
for iface in "${INTERFACES[@]}"; do
    if [[ $iface == enp* ]]; then
        INTERFACE="$iface"
        break
    fi
done

# 如果没有找到 enp 开头的网卡，或者用户想手动选择，则进入手动选择流程
if [ -z "$INTERFACE" ]; then
    echo "未找到以 enp 开头的网卡，下面列出所有可用网卡："
    for i in "${!INTERFACES[@]}"; do
        idx=$((i+1))
        echo "$idx) ${INTERFACES[i]}"
    done

    if [ ${#INTERFACES[@]} -eq 1 ]; then
        echo "只检测到一个网卡，将自动选择：${INTERFACES[0]}"
        INTERFACE="${INTERFACES[0]}"
    else
        while true; do
            echo -n "请输入要配置的网卡编号（1-${#INTERFACES[@]}）："
            read choice
            if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le ${#INTERFACES[@]} ]; then
                INTERFACE="${INTERFACES[$((choice-1))]}"
                break
            else
                echo "输入无效，请输入有效的编号！"
            fi
        done
    fi
else
    echo "自动选择网卡：$INTERFACE"
fi

echo "将为网卡 $INTERFACE 配置静态 IP 192.168.121.20/24"

CONFIG_FILE="/etc/netplan/30-cotti.yaml"

# 使用 cat 和 heredoc 写入 YAML 文件（注意缩进严格要求）
sudo bash -c "cat > $CONFIG_FILE" << EOF
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    $INTERFACE:
      dhcp4: false
      addresses:
        - 192.168.121.20/24
      gateway4: 192.168.121.1
      nameservers:
        addresses:
          - 8.8.8.8
EOF

echo "已生成配置文件：$CONFIG_FILE"
echo "内容如下："
sudo cat $CONFIG_FILE

# 应用配置
echo "正在应用配置..."
sudo netplan apply

echo "配置完成！请使用 ip addr show $INTERFACE 检查 IP 是否已生效。"