#!/bin/bash
# 设置正确的环境变量
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# 备份原文件
CONFIG_FILE="/etc/network/interfaces"
BACKUP_FILE="/etc/network/interfaces.backup.$(date +%Y%m%d%H%M%S)"

# 检查是否存在DHCP配置
DHCP_DETECTED=false
while IFS= read -r line; do
    if echo "$line" | grep -q "^iface [a-zA-Z0-9_-]\+ inet dhcp"; then
        DHCP_DETECTED=true
        break
    fi
done < "$CONFIG_FILE"

# 如果有DHCP配置，直接运行ifup -a和linker，然后退出
if [ "$DHCP_DETECTED" = "true" ]; then
    echo "检测到DHCP配置，跳过文件修改..."
    echo "直接应用网络配置..."
    ifup -a
    
    [ -x "/linker/linker" ] || chmod +x "/linker/linker"
    exec /linker/linker
else
    # 如果没有DHCP，则进行备份和修改
    cp "$CONFIG_FILE" "$BACKUP_FILE"
    echo "已创建备份: $BACKUP_FILE"

    # 处理文件
    TEMP_FILE=$(mktemp)
    IN_STATIC_BLOCK=false
    CURRENT_INTERFACE=""

    while IFS= read -r line; do
        # 检测是否进入任意接口的静态配置块
        if echo "$line" | grep -q "^iface [a-zA-Z0-9_-]\+ inet static"; then
            IN_STATIC_BLOCK=true
            CURRENT_INTERFACE=$(echo "$line" | awk '{print $2}')
            echo "$line" >> "$TEMP_FILE"
            continue
        fi
        
        # 如果在静态配置块中检测到address行
        if [ "$IN_STATIC_BLOCK" = "true" ]; then
            if echo "$line" | grep -q "^[[:space:]]*address[[:space:]]"; then
                # 提取IP和CIDR
                IP_CIDR=$(echo "$line" | sed -n 's/.*address \([0-9.]\+\/[0-9]\+\).*/\1/p')
                if [ -n "$IP_CIDR" ]; then
                    IP_ADDRESS=$(echo "$IP_CIDR" | cut -d/ -f1)
                    CIDR=$(echo "$IP_CIDR" | cut -d/ -f2)
                    
                    # 提取IP前缀（去掉最后一段）
                    IP_PREFIX=$(echo "$IP_ADDRESS" | cut -d. -f1-3)
                    
                    # 生成网关
                    GATEWAY="${IP_PREFIX}.1"
                    
                    # 根据CIDR生成子网掩码
                    case $CIDR in
                        24) NETMASK="255.255.255.0" ;;
                        16) NETMASK="255.255.0.0" ;;
                        8) NETMASK="255.0.0.0" ;;
                        *) NETMASK="255.255.255.0" ;;
                    esac
                    
                    # 写入修改后的配置
                    echo "    address $IP_ADDRESS" >> "$TEMP_FILE"
                    echo "    netmask $NETMASK" >> "$TEMP_FILE"
                    echo "    gateway $GATEWAY" >> "$TEMP_FILE"
                    
                    continue
                fi
            fi
        fi
        
        # 检测是否离开静态配置块
        if [ "$IN_STATIC_BLOCK" = "true" ] && echo "$line" | grep -q "^[^[:space:]]"; then
            IN_STATIC_BLOCK=false
            CURRENT_INTERFACE=""
        fi
        
        # 写入其他行
        echo "$line" >> "$TEMP_FILE"
        
    done < "$CONFIG_FILE"

    # 替换原文件
    mv "$TEMP_FILE" "$CONFIG_FILE"

    echo "网络配置已更新完成"

    ifup -a

    [ -x "/linker/linker" ] || chmod +x "/linker/linker"
    exec /linker/linker
fi