#!/bin/bash

# 初始化语言变量
LANG_CHOICE=""
AGREED="no"

# 彩色输出函数
color_output() {
    echo -e "$1"
}

# 显示语言选择菜单
select_language() {
    clear
    color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
    color_output "\e[36m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\e[0m"
    color_output "\e[36m┃                                       ┃\e[0m"
    color_output "\e[36m┃        \e[33m请选择语言/Select Language\e[36m     ┃\e[0m"
    color_output "\e[36m┃                                       ┃\e[0m"
    color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
    color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
    color_output ""
    color_output "1. 中文"
    color_output "2. English"
    color_output "0. 退出/Exit"  
    color_output ""
    color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
    
    while [[ -z "$LANG_CHOICE" ]]; do
        read -p "$(color_output "\e[33m请选择语言 [1-2]: \e[0m")" LANG_CHOICE
        case "$LANG_CHOICE" in
            1) LANG_CHOICE="zh";;
            2) LANG_CHOICE="en";;
            0) exit 0 ;;
            *) 
                color_output "\e[31m无效选择，请重新输入\e[0m"
                LANG_CHOICE=""
                ;;
        esac
    done
}

# 显示用户协议
show_agreement() {
    clear
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        color_output "\e[36m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\e[0m"
        color_output "\e[36m┃        \e[33mZeroWrt 配置工具用户协议\e[36m       ┃\e[0m"
        color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        color_output ""
        color_output "1. 本工具仅用于学习和研究目的，不得用于非法用途。"
        color_output "2. 使用本工具可能会修改您的路由器配置，请谨慎操作。"
        color_output "3. 作者不对使用本工具造成的任何损失负责。"
        color_output "4. 继续使用表示您同意以上条款。"
        color_output ""
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        
        while [[ "$AGREED" != "yes" ]]; do
            read -p "$(color_output "\e[33m您是否同意上述条款？(yes/no): \e[0m")" AGREED
            case "$AGREED" in
                yes|YES|y|Y) 
                    AGREED="yes"
                    ;;
                no|NO|n|N)
                    color_output "\e[31m您必须同意条款才能使用本工具。\e[0m"
                    exit 1
                    ;;
                *)
                    color_output "\e[31m请输入yes或no\e[0m"
                    ;;
            esac
        done
    else
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        color_output "\e[36m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\e[0m"
        color_output "\e[36m┃   \e[33mZeroWrt Config Tool User Agreement\e[36m  ┃\e[0m"
        color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        color_output ""
        color_output "1. This tool is for learning and research only, not for illegal use."
        color_output "2. Using this tool may modify your router settings, use with caution."
        color_output "3. The author is not responsible for any damage caused by this tool."
        color_output "4. Continuing to use means you agree to these terms."
        color_output ""
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        
        while [[ "$AGREED" != "yes" ]]; do
            read -p "$(color_output "\e[33mDo you agree to these terms? (yes/no): \e[0m")" AGREED
            case "$AGREED" in
                yes|YES|y|Y) 
                    AGREED="yes"
                    ;;
                no|NO|n|N)
                    color_output "\e[31mYou must agree to the terms to use this tool.\e[0m"
                    exit 1
                    ;;
                *)
                    color_output "\e[31mPlease enter yes or no\e[0m"
                    ;;
            esac
        done
    fi
}

# 打印脚本头部，增加美观
print_header() {
    clear
    # 获取系统信息
    local model=$(cat /tmp/sysinfo/model 2>/dev/null || echo "未知设备")
    # 使用更可靠的方式获取 CPU 使用率
    local cpu_usage=$(grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {printf "%.1f%%", usage}')
    local mem_total=$(free | grep Mem | awk '{print $2}')
    local mem_used=$(free | grep Mem | awk '{print $3}')
    local mem_usage=$((mem_used * 100 / mem_total))

    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        color_output "\e[36m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\e[0m"
        color_output "\e[36m┃                                       ┃\e[0m"
        color_output "\e[36m┃        \e[33m欢迎使用 ZeroWrt 配置工具\e[36m      ┃\e[0m"
        color_output "\e[36m┃                                       ┃\e[0m"
        color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        color_output ""
        color_output "\e[34m系统信息\e[0m"
        color_output "----------------------------------------"
        color_output "  设备型号: $model"
        color_output "  CPU 占用: $cpu_usage"
        color_output "  内存占用: ${mem_usage}%"
        color_output "----------------------------------------"
        color_output "\e[32m说明：本工具用于配置 ZeroWrt      \e[0m"
        color_output "\e[32m博客：https://www.kejizero.online\e[0m"
        color_output "----------------------------------------"
    else
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        color_output "\e[36m┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\e[0m"
        color_output "\e[36m┃                                       ┃\e[0m"
        color_output "\e[36m┃      \e[33mWelcome to ZeroWrt Config Tool\e[36m   ┃\e[0m"
        color_output "\e[36m┃                                       ┃\e[0m"
        color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
        color_output "\e[36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m"
        color_output ""
        color_output "\e[34mSystem Information\e[0m"
        color_output "----------------------------------------"
        color_output "  Device Model: $model"
        color_output "  CPU Usage: $cpu_usage"
        color_output "  Memory Usage: ${mem_usage}%"
        color_output "----------------------------------------"
        color_output "\e[32mDescription: This tool configures ZeroWrt\e[0m"
        color_output "\e[32mBlog: https://www.kejizero.online\e[0m"
        color_output "----------------------------------------"
    fi
    echo ""
}

# 显示菜单
show_menu() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[36m┏━━━━━━━━━━━━━━━ 功能菜单 ━━━━━━━━━━━━━━━┓\e[0m"
        color_output "\e[36m┃                                        ┃\e[0m"
        color_output "\e[36m┃\e[0m  1. 更改 LAN 口 IP 地址                \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  2. 更改管理员密码                     \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  3. 切换默认主题                       \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  4. 恢复出厂设置                       \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  5. 一键换源                           \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  6. 一键部署                           \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  7. 一键加载所有驱动                   \e[36m┃\e[0m"          
        color_output "\e[36m┃\e[0m  8. IPv6 开关 (仅适用于主路由)         \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  9. iStoreOS 风格化                    \e[36m┃\e[0m"    
        color_output "\e[36m┃\e[0m  10. 检测更新                          \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  0. 退出                               \e[36m┃\e[0m"
        color_output "\e[36m┃                                        ┃\e[0m"
        color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
        read -p "$(color_output "\e[33m请输入您的选择 [0-10]: \e[0m")" choice
    else
        color_output "\e[36m┏━━━━━━━━━━━━━━━ MENU ━━━━━━━━━━━━━━━━━━┓\e[0m"
        color_output "\e[36m┃                                       ┃\e[0m"
        color_output "\e[36m┃\e[0m  1. Change LAN IP Address             \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  2. Change Admin Password             \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  3. Switch Default Theme              \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  4. Factory Reset                     \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  5. Change Software Sources           \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  6. One-click Deployment              \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  7. One-click loading of all drivers  \e[36m┃\e[0m" 
        color_output "\e[36m┃\e[0m  8. IPv6 Toggle (Main Router Only)    \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  9. iStoreOS Styling                  \e[36m┃\e[0m"    
        color_output "\e[36m┃\e[0m  10. Check for Updates                \e[36m┃\e[0m"
        color_output "\e[36m┃\e[0m  0. Exit                              \e[36m┃\e[0m"
        color_output "\e[36m┃                                       ┃\e[0m"
        color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
        read -p "$(color_output "\e[33mEnter your choice [0-10]: \e[0m")" choice
    fi
    
    case "$choice" in
        1) change_ip ;;
        2) change_password ;;
        3) change_theme ;;
        4) reset_config ;;
        5) change_source ;;
        6) install_apps ;;
        7) Load_driver ;;
        8) configure_ipv6 ;;
        9) istore_style ;;
        10) check_update ;;
        0) exit 0 ;;
        *) 
            if [[ "$LANG_CHOICE" == "zh" ]]; then
                color_output "\e[31m无效选项，请重新输入\e[0m"
            else
                color_output "\e[31mInvalid option, please try again\e[0m"
            fi
            show_menu 
            ;;
    esac
}

# 1. 更换 LAN 口 IP 地址
change_ip() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[更改 LAN 口 IP 地址]\e[0m"
        read -p "请输入新的 LAN 口 IP 地址（如 192.168.1.2）: " new_ip
        if [[ -n "$new_ip" ]]; then
            uci set network.lan.ipaddr="$new_ip"
            uci commit network
            color_output "\e[32mLAN 口 IP 已成功更改为 $new_ip\e[0m"
            color_output "\e[33m系统将在 10 秒后自动重启，请使用新的 IP 地址重新连接。\e[0m"
            sleep 10
            reboot
        else
            color_output "\e[31m无效的 IP 地址，操作取消。\e[0m"
            read -p "按 Enter 键返回菜单..." 
            show_menu
        fi
    else
        color_output "\e[34m[Change LAN IP Address]\e[0m"
        read -p "Enter new LAN IP address (e.g. 192.168.1.2): " new_ip
        if [[ -n "$new_ip" ]]; then
            uci set network.lan.ipaddr="$new_ip"
            uci commit network
            color_output "\e[32mLAN IP successfully changed to $new_ip\e[0m"
            color_output "\e[33mSystem will reboot in 10 seconds, please reconnect using the new IP.\e[0m"
            sleep 10
            reboot
        else
            color_output "\e[31mInvalid IP address, operation cancelled.\e[0m"
            read -p "Press Enter to return to menu..." 
            show_menu
        fi
    fi
}

# 2. 更改管理员密码
change_password() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[更改管理员密码]\e[0m"
        read -p "请输入新的管理员密码: " new_password
        if [[ -n "$new_password" ]]; then
            # 使用 openssl 生成密码哈希，使用 -1 参数生成 MD5 格式的密码哈希
            password_hash=$(openssl passwd -1 "$new_password")
            
            # 获取当前 shadow 文件的其他行
            tail -n +2 /etc/shadow > /tmp/shadow.tmp
            
            # 创建新的 root 行
            echo "root:$password_hash:0:0:99999:7:::" > /etc/shadow
            
            # 添加其他行
            cat /tmp/shadow.tmp >> /etc/shadow
            
            # 清理临时文件
            rm -f /tmp/shadow.tmp
            
            color_output "\e[32m管理员密码已成功更改。\e[0m"
        else
            color_output "\e[31m无效的密码，操作取消。\e[0m"
        fi
        read -p "按 Enter 键返回菜单..."
    else
        color_output "\e[34m[Change Admin Password]\e[0m"
        read -p "Enter new admin password: " new_password
        if [[ -n "$new_password" ]]; then
            # 使用 openssl 生成密码哈希，使用 -1 参数生成 MD5 格式的密码哈希
            password_hash=$(openssl passwd -1 "$new_password")
            
            # 获取当前 shadow 文件的其他行
            tail -n +2 /etc/shadow > /tmp/shadow.tmp
            
            # 创建新的 root 行
            echo "root:$password_hash:0:0:99999:7:::" > /etc/shadow
            
            # 添加其他行
            cat /tmp/shadow.tmp >> /etc/shadow
            
            # 清理临时文件
            rm -f /tmp/shadow.tmp
            
            color_output "\e[32mAdmin password changed successfully.\e[0m"
        else
            color_output "\e[31mInvalid password, operation cancelled.\e[0m"
        fi
        read -p "Press Enter to return to menu..."
    fi
    show_menu
}

# 3. 切换默认主题
change_theme() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[切换默认主题]\e[0m"
        uci set luci.main.mediaurlbase='/luci-static/bootstrap'
        uci commit luci
        color_output "\e[32m主题已成功切换为默认主题。\e[0m"
        read -p "按 Enter 键返回菜单..."
    else
        color_output "\e[34m[Switch Default Theme]\e[0m"
        uci set luci.main.mediaurlbase='/luci-static/bootstrap'
        uci commit luci
        color_output "\e[32mTheme successfully switched to default.\e[0m"
        read -p "Press Enter to return to menu..."
    fi
    show_menu
}

# 4. 一键重置配置
reset_config() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[31m[恢复出厂设置]\e[0m"
        color_output "\e[31m警告：此操作将清除所有设置！\e[0m"
        read -p "确定要继续吗？(y/n): " confirm
        if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
            echo "恢复出厂设置中..."
            firstboot -y
            color_output "\e[33m设备将在 5 秒钟后重启...\e[0m"
            sleep 5
            reboot
        else
            color_output "\e[32m操作已取消\e[0m"
            read -p "按 Enter 键返回菜单..."
            show_menu
        fi
    else
        color_output "\e[31m[Factory Reset]\e[0m"
        color_output "\e[31mWarning: This will erase all settings!\e[0m"
        read -p "Are you sure you want to continue? (y/n): " confirm
        if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
            echo "Resetting to factory defaults..."
            firstboot -y
            color_output "\e[33mDevice will reboot in 5 seconds...\e[0m"
            sleep 5
            reboot
        else
            color_output "\e[32mOperation cancelled\e[0m"
            read -p "Press Enter to return to menu..."
            show_menu
        fi
    fi
}

# 5. 一键换源
change_source() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[更换软件源]\e[0m"
        color_output "\e[36m请选择要使用的源：\e[0m"
        color_output "1. 阿里源"
        color_output "2. 清华源"
        color_output "3. 中科大源"
        color_output "4. 高校联合镜像站"
        color_output "5. 南方科技大学"
        color_output "6. 官方源"
        color_output "0. 返回"
        read -p "请输入您的选择 [0-6]: " source_choice
    else
        color_output "\e[34m[Change Software Sources]\e[0m"
        color_output "\e[36mSelect source to use:\e[0m"
        color_output "1. Aliyun Mirror"
        color_output "2. Tsinghua Mirror"
        color_output "3. USTC Mirror"
        color_output "4. University Union Mirror"
        color_output "5. SUSTech Mirror"
        color_output "6. Official Source"
        color_output "0. Back"
        read -p "Enter your choice [0-6]: " source_choice
    fi

    # 仅支持 x86_64 和 aarch64 架构
    arch=$(uname -m)
    case "$arch" in
        "x86_64")
            arch_name="x86_64"
            target_core_url="https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.1/targets/x86/64/kmods/6.6.86-1-af351158cfb5febf5155a3aa53785982"
            extras_url="https://clone.kejizero.online/raw.githubusercontent.com/oppen321/openwrt_extras/main/x86_64"
            ;;
        "aarch64")
            arch_name="aarch64_generic"
            target_core_url="https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.1/targets/rockchip/armv8/kmods/6.6.86-1-a8e18e0ecc66cc99303d258424ec0db8"
            extras_url="https://clone.kejizero.online/raw.githubusercontent.com/oppen321/openwrt_extras/main/aarch64"
            ;;
        *)
            if [[ "$LANG_CHOICE" == "zh" ]]; then
                color_output "\e[31m仅支持 x86_64 和 aarch64 架构，当前架构为：$arch\e[0m"
            else
                color_output "\e[31mOnly x86_64 and aarch64 are supported, current arch: $arch\e[0m"
            fi
            read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回菜单..." || echo "Press Enter to return to menu...")"
            show_menu
            return
            ;;
    esac

    # 镜像站选择
    case "$source_choice" in
        1) base_url="https://mirrors.aliyun.com/openwrt/releases/24.10.0/packages/$arch_name" ;;
        2) base_url="https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.0/packages/$arch_name" ;;
        3) base_url="https://mirrors.ustc.edu.cn/openwrt/releases/24.10.0/packages/$arch_name" ;;
        4) base_url="https://mirrors.xjtu.edu.cn/openwrt/releases/24.10.0/packages/$arch_name" ;;
        5) base_url="https://mirrors.sustech.edu.cn/openwrt/releases/24.10.0/packages/$arch_name" ;;
        6) base_url="https://downloads.openwrt.org/releases/24.10.0/packages/$arch_name" ;;
        0) show_menu; return ;;
        *) 
            if [[ "$LANG_CHOICE" == "zh" ]]; then
                color_output "\e[31m无效选项，返回菜单。\e[0m"
            else
                color_output "\e[31mInvalid option, returning to menu.\e[0m"
            fi
            show_menu; return 
            ;;
    esac

    # 生成 distfeeds.conf 文件
    cat <<EOF > /etc/opkg/distfeeds.conf
src/gz openwrt_base $base_url/base
src/gz openwrt_luci $base_url/luci
src/gz openwrt_packages $base_url/packages
src/gz openwrt_routing $base_url/routing
src/gz openwrt_telephony $base_url/telephony
src/gz openwrt_core $target_core_url
src/gz openwrt_extras $extras_url/package
src/gz openwrt_helloworld $extras_url/helloworld
EOF

    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[32m软件源已成功切换并追加自定义源。\e[0m"
        read -p "按 Enter 键返回菜单..."
    else
        color_output "\e[32mSoftware sources changed successfully with custom sources added.\e[0m"
        read -p "Press Enter to return to menu..."
    fi
    show_menu
}

# 6. 一键部署
install_apps() {
    while true; do
        clear
        if [[ "$LANG_CHOICE" == "zh" ]]; then
            color_output "\e[34m[一键部署]\e[0m"
            color_output "\e[36m┏━━━━━━━━━━━━━━━ 部署选项 ━━━━━━━━━━━━━━━┓\e[0m"
            color_output "\e[36m┃                                        ┃\e[0m"
            color_output "\e[36m┃\e[0m  1. 部署 ShellClash                    \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  2. 部署 小雅 Alist                    \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  3. 部署 Subconverter                  \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  4. 部署 AdGuardhome                   \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  5. 部署 Gitea-MySQL                   \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  6. 部署 SunPanel导航页                \e[36m┃\e[0m"        
            color_output "\e[36m┃\e[0m  0. 返回主菜单                         \e[36m┃\e[0m"
            color_output "\e[36m┃                                        ┃\e[0m"
            color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
            read -p "$(color_output "\e[33m请输入您的选择 [0-6]: \e[0m")" app_choice
        else
            color_output "\e[34m[One-click Deployment]\e[0m"
            color_output "\e[36m┏━━━━━━━━━━━━━━━ DEPLOYMENT ━━━━━━━━━━━━━━━┓\e[0m"
            color_output "\e[36m┃                                          ┃\e[0m"
            color_output "\e[36m┃\e[0m  1. Deploy ShellClash                    \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  2. Deploy XiaoYa Alist                  \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  3. Deploy Subconverter                  \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  4. Deploy AdGuardhome                   \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  5. Deploy Gitea-MySQL                   \e[36m┃\e[0m"
            color_output "\e[36m┃\e[0m  6. Deploy SunPanel                      \e[36m┃\e[0m"        
            color_output "\e[36m┃\e[0m  0. Back to Main Menu                    \e[36m┃\e[0m"
            color_output "\e[36m┃                                          ┃\e[0m"
            color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
            read -p "$(color_output "\e[33mEnter your choice [0-6]: \e[0m")" app_choice
        fi

        case "$app_choice" in
            1)
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[34m[部署 ShellClash]\e[0m"
                    color_output "\e[36m请选择 ShellClash 的安装源：\e[0m"
                    color_output "1. GitHub 源"
                    color_output "2. jsDelivr CDN 源"
                    color_output "0. 返回"
                    read -p "请输入您的选择 [0-2]: " install_choice
                else
                    color_output "\e[34m[Deploy ShellClash]\e[0m"
                    color_output "\e[36mSelect installation source:\e[0m"
                    color_output "1. GitHub Source"
                    color_output "2. jsDelivr CDN Source"
                    color_output "0. Back"
                    read -p "Enter your choice [0-2]: " install_choice
                fi

                case "$install_choice" in
                    1) export url='https://raw.githubusercontent.com/juewuy/ShellCrash/master' ;;
                    2) export url='https://fastly.jsdelivr.net/gh/juewuy/ShellCrash@master' ;;
                    0) continue ;;
                    *) 
                        if [[ "$LANG_CHOICE" == "zh" ]]; then
                            color_output "\e[31m无效选项\e[0m"
                        else
                            color_output "\e[31mInvalid option\e[0m"
                        fi
                        sleep 2
                        continue 
                        ;;
                esac

                if [ "$install_choice" != "0" ]; then
                    sh -c "$(curl -kfsSl $url/install.sh)" && source /etc/profile &> /dev/null
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[32mShellClash 已成功安装。\e[0m"
                    else
                        color_output "\e[32mShellClash installed successfully.\e[0m"
                    fi
                    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键继续..." || echo "Press Enter to continue...")"
                fi
                ;;

            2)
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[34m[部署小雅 Alist]\e[0m"
                    color_output "\e[33m正在部署小雅 Alist...\e[0m"
                else
                    color_output "\e[34m[Deploy XiaoYa Alist]\e[0m"
                    color_output "\e[33mDeploying XiaoYa Alist...\e[0m"
                fi
                bash -c "$(curl --insecure -fsSL https://ddsrem.com/xiaoya_install.sh)"
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[32m小雅 Alist 安装完成。\e[0m"
                else
                    color_output "\e[32mXiaoYa Alist installed successfully.\e[0m"
                fi
                read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键继续..." || echo "Press Enter to continue...")"
                ;;
            3)
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[34m[部署 Subconverter]\e[0m"
                else
                    color_output "\e[34m[Deploy Subconverter]\e[0m"
                fi
                
                # 检查 Docker 是否已安装
                if ! command -v docker &> /dev/null; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[33m未检测到 Docker，正在安装...\e[0m"
                    else
                        color_output "\e[33mDocker not found, installing...\e[0m"
                    fi
                    opkg update && opkg install docker
                fi
                
                # 检查 Subconverter 是否已运行
                if docker ps | grep -q "subconverter"; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[32mSubconverter 已经在运行\e[0m"
                    else
                        color_output "\e[32mSubconverter is already running\e[0m"
                    fi
                    
                    # 获取本机 IP 地址
                    local_ip=$(ip addr show br-lan | grep -w inet | awk '{print $2}' | cut -d/ -f1)
                    
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[36m┏━━━━━━━━━━━━━━━ 配置模板 ━━━━━━━━━━━━━━━┓\e[0m"
                        color_output "\e[36m┃                                        ┃\e[0m"
                        color_output "\e[36m┃\e[0m  1. ACL4SSR_Online_Mini.ini            \e[36m┃\e[0m"
                        color_output "\e[36m┃\e[0m  2. ACL4SSR_Online_Full.ini            \e[36m┃\e[0m"
                        color_output "\e[36m┃\e[0m  3. ACL4SSR_Online.ini                 \e[36m┃\e[0m"
                        color_output "\e[36m┃\e[0m  0. 返回上一级                         \e[36m┃\e[0m"
                        color_output "\e[36m┃                                        ┃\e[0m"
                        color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
                        read -p "$(color_output "\e[33m请输入选择 [0-3]: \e[0m")" template_choice
                    else
                        color_output "\e[36m┏━━━━━━━━━━━━━━━ CONFIG TEMPLATE ━━━━━━━━━━━━━━━┓\e[0m"
                        color_output "\e[36m┃                                        ┃\e[0m"
                        color_output "\e[36m┃\e[0m  1. ACL4SSR_Online_Mini.ini            \e[36m┃\e[0m"
                        color_output "\e[36m┃\e[0m  2. ACL4SSR_Online_Full.ini            \e[36m┃\e[0m"
                        color_output "\e[36m┃\e[0m  3. ACL4SSR_Online.ini                 \e[36m┃\e[0m"
                        color_output "\e[36m┃\e[0m  0. Back                              \e[36m┃\e[0m"
                        color_output "\e[36m┃                                        ┃\e[0m"
                        color_output "\e[36m┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\e[0m"
                        read -p "$(color_output "\e[33mEnter your choice [0-3]: \e[0m")" template_choice
                    fi

                    case "$template_choice" in
                    1) config_url="https://git.kejizero.online/zhao/rule/raw/branch/main/mihomo/ACL4SSR_Online_Mini.ini" ;;
                    2) config_url="https://git.kejizero.online/zhao/rule/raw/branch/main/mihomo/ACL4SSR_Online_Full.ini" ;;
                    3) config_url="https://git.kejizero.online/zhao/rule/raw/branch/main/mihomo/ACL4SSR_Online.ini" ;;
                    0) continue ;; # 返回上一级
                    *) 
                        if [[ "$LANG_CHOICE" == "zh" ]]; then
                            color_output "\e[31m无效选择\e[0m"
                        else
                            color_output "\e[31mInvalid choice\e[0m"
                        fi
                        read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键继续..." || echo "Press Enter to continue...")"
                        continue
                     ;;
                    esac
                    
                    # 获取订阅链接
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        read -p "请输入订阅链接: " sub_url
                    else
                        read -p "Enter subscription URL: " sub_url
                    fi
                    
                    if [ -n "$sub_url" ]; then
                        # 生成完整的转换链接
                        convert_url="http://${local_ip}:25500/sub?target=clash&insert=true&new_name=true&scv=true&url=${sub_url}&config=${config_url}"
                        
                        if [[ "$LANG_CHOICE" == "zh" ]]; then
                            color_output "\e[32m转换链接已生成：\e[0m"
                        else
                            color_output "\e[32mConversion URL generated:\e[0m"
                        fi
                        color_output "\e[33m${convert_url}\e[0m"
                    else
                        if [[ "$LANG_CHOICE" == "zh" ]]; then
                            color_output "\e[31m订阅链接不能为空\e[0m"
                        else
                            color_output "\e[31mSubscription URL cannot be empty\e[0m"
                        fi
                    fi
                else
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[33m正在部署 Subconverter...\e[0m"
                    else
                        color_output "\e[33mDeploying Subconverter...\e[0m"
                    fi
                    if docker run -d --restart=always -p 25500:25500 tindy2013/subconverter:latest; then
                        if [[ "$LANG_CHOICE" == "zh" ]]; then
                            color_output "\e[32mSubconverter 部署成功！\e[0m"
                        else
                            color_output "\e[32mSubconverter deployed successfully!\e[0m"
                        fi
                    else
                        if [[ "$LANG_CHOICE" == "zh" ]]; then
                            color_output "\e[31mSubconverter 部署失败\e[0m"
                        else
                            color_output "\e[31mSubconverter deployment failed\e[0m"
                        fi
                    fi
                fi
                read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回..." || echo "Press Enter to return...")"
                ;;
            4)
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[34m[部署 AdGuardHome]\e[0m"
                else
                    color_output "\e[34m[Deploy AdGuardHome]\e[0m"
                fi
                
                # 检查 Docker 是否已安装
                if ! command -v docker &> /dev/null; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[33m未检测到 Docker，正在安装...\e[0m"
                    else
                        color_output "\e[33mDocker not found, installing...\e[0m"
                    fi
                    opkg update && opkg install docker
                fi
                
                # 获取本机 IP 地址
                local_ip=$(ip addr show br-lan | grep -w inet | awk '{print $2}' | cut -d/ -f1)
                
                # 检查 AdGuardHome 是否已运行
                if docker ps | grep -q "adguardhome"; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[32mAdGuardHome 已经在运行！\e[0m"
                        color_output "\e[33m请使用浏览器访问：\e[0m"
                    else
                        color_output "\e[32mAdGuardHome is already running!\e[0m"
                        color_output "\e[33mAccess it at:\e[0m"
                    fi
                    color_output "\e[32mhttp://${local_ip}:3000\e[0m"
                else
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[33m正在部署 AdGuardHome...\e[0m"
                    else
                        color_output "\e[33mDeploying AdGuardHome...\e[0m"
                    fi
                    
                    # 创建配置目录
                    mkdir -p /root/adguardhome/work /root/adguardhome/conf
                    
                    # 部署 AdGuardHome
                    if docker run -d \
                        --name adguardhome \
                        -v /root/adguardhome/work:/opt/adguardhome/work \
                        -v /root/adguardhome/conf:/opt/adguardhome/conf \
                        -p 3000:3000 \
                        --restart always \
                        adguard/adguardhome; then
                        
                        if [[ "$LANG_CHOICE" == "zh" ]]; then
                            color_output "\e[32m\nAdGuardHome 部署成功！\e[0m"
                            color_output "\e[33m请使用浏览器访问以下地址进行配置：\e[0m"
                        else
                            color_output "\e[32m\nAdGuardHome deployed successfully!\e[0m"
                            color_output "\e[33mAccess the following URL to configure:\e[0m"
                        fi
                        color_output "\e[32mhttp://${local_ip}:3000\e[0m"
                    else
                        if [[ "$LANG_CHOICE" == "zh" ]]; then
                            color_output "\e[31mAdGuardHome 部署失败\e[0m"
                        else
                            color_output "\e[31mAdGuardHome deployment failed\e[0m"
                        fi
                    fi
                fi
                read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回..." || echo "Press Enter to return...")"
                ;;
            5)
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[34m[部署 Gitea-MySQL]\e[0m"
                else
                    color_output "\e[34m[Deploy Gitea-MySQL]\e[0m"
                fi

                # 检查 Gitea 容器是否已存在
                if docker ps -a | grep -q "gitea"; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[33mGitea-MySQL 已经部署过，跳过部署！\e[0m"
                    else
                        color_output "\e[33mGitea-MySQL already deployed, skipping!\e[0m"
                    fi
                    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回..." || echo "Press Enter to return...")"
                    continue
                fi

                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[33m正在部署 Gitea 和 MySQL...\e[0m"
                else
                    color_output "\e[33mDeploying Gitea and MySQL...\e[0m"
                fi

                # 创建目录
                mkdir -p /opt/Gitea
                mkdir -p /opt/MySQL

                # 下载 Docker Compose 文件到 /opt/gitea
                curl -L https://git.kejizero.online/zhao/files/raw/branch/main/docker-compose/Gitea -o /opt/Gitea/docker-compose.yml
    
                # 检查是否下载成功
                if [ -f "/opt/Gitea/docker-compose.yml" ]; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[32mDocker Compose 文件下载成功！\e[0m"
                    else
                        color_output "\e[32mDocker Compose file downloaded successfully!\e[0m"
                    fi
                else
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[31mDocker Compose 文件下载失败！\e[0m"
                    else
                        color_output "\e[31mDocker Compose file download failed!\e[0m"
                    fi
                    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回..." || echo "Press Enter to return...")"
                    continue
                fi

                # 部署 Gitea 和 MySQL
                cd /opt/Gitea
                docker-compose up -d
    
                if docker ps | grep -q "gitea"; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[32mGitea-MySQL 部署成功！\e[0m"
                    else
                        color_output "\e[32mGitea-MySQL deployed successfully!\e[0m"
                    fi
                else
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[31mGitea-MySQL 部署失败！\e[0m"
                    else
                        color_output "\e[31mGitea-MySQL deployment failed!\e[0m"
                    fi
                fi
                read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回..." || echo "Press Enter to return...")"
                ;;
            6)
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[34m[部署 sun-panel]\e[0m"
                else
                    color_output "\e[34m[Deploy sun-panel]\e[0m"
                fi

                # 检查 SunPanel 容器是否已存在
                if docker ps -a --filter "name=sun-panel" | grep -q "sun-panel"; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[33msun-panel 已经部署过，跳过部署！\e[0m"
                    else
                        color_output "\e[33msun-panel already deployed, skipping!\e[0m"
                    fi
                    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回..." || echo "Press Enter to return...")"
                    continue
                fi

                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[33m正在部署 SunPanel...\e[0m"
                else
                    color_output "\e[33mDeploying SunPanel...\e[0m"
                fi

                # 创建目录
                mkdir -p /opt/sunpanel

                # 下载 Docker Compose 文件到 /opt/sunpanel
                curl -v -L https://git.kejizero.online/zhao/files/raw/branch/main/docker-compose/SunPanel -o /opt/sunpanel/docker-compose.yml

                # 检查是否下载成功
                if [ -f "/opt/sunpanel/docker-compose.yml" ]; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[32mDocker Compose 文件下载成功！\e[0m"
                    else
                        color_output "\e[32mDocker Compose file downloaded successfully!\e[0m"
                    fi
                else
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[31mDocker Compose 文件下载失败！\e[0m"
                    else
                        color_output "\e[31mDocker Compose file download failed!\e[0m"
                    fi
                    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回..." || echo "Press Enter to return...")"
                    continue
                fi

                # 部署 SunPanel
                cd /opt/sunpanel
                docker-compose up -d

                if docker ps | grep -q "sun-panel"; then
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[32msun-panel 部署成功！\e[0m"
                    else
                        color_output "\e[32msun-panel deployed successfully!\e[0m"
                    fi
                else
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[31msun-panel 部署失败！\e[0m"
                    else
                        color_output "\e[31msun-panel deployment failed!\e[0m"
                    fi
                    docker logs $(docker ps -a -q --filter "name=sun-panel")  # 查看失败的容器日志
                fi
                read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回..." || echo "Press Enter to return...")"
                ;;                                  
            0)
                show_menu
                return
                ;;
            *)
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[31m无效选项，请重新选择\e[0m"
                else
                    color_output "\e[31mInvalid option, please try again\e[0m"
                fi
                sleep 2
                ;;
        esac
    done
}
# 7. 加载驱动
Load_driver() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[加载所有驱动]\e[0m"
    else
        color_output "\e[34m[Load all drivers]\e[0m"
    fi
    opkg update && opkg install aircard-pcmcia-firmware ar3k-firmware ath10k-board-qca4019 ath10k-board-qca9377 ath10k-board-qca9887 ath10k-board-qca9888 ath10k-board-qca988x ath10k-board-qca9984 ath10k-board-qca99x0 ath10k-firmware-qca4019 ath10k-firmware-qca4019-ct ath10k-firmware-qca4019-ct-full-htt ath10k-firmware-qca4019-ct-htt ath10k-firmware-qca6174 ath10k-firmware-qca9377 ath10k-firmware-qca9887 ath10k-firmware-qca9887-ct ath10k-firmware-qca9887-ct-full-htt ath10k-firmware-qca9888 ath10k-firmware-qca9888-ct ath10k-firmware-qca9888-ct-full-htt ath10k-firmware-qca9888-ct-htt ath10k-firmware-qca988x ath10k-firmware-qca988x-ct ath10k-firmware-qca988x-ct-full-htt ath10k-firmware-qca9984 ath10k-firmware-qca9984-ct ath10k-firmware-qca9984-ct-full-htt ath10k-firmware-qca9984-ct-htt ath10k-firmware-qca99x0 ath10k-firmware-qca99x0-ct ath10k-firmware-qca99x0-ct-full-htt ath10k-firmware-qca99x0-ct-htt ath11k-firmware-ipq8074 ath11k-firmware-qca6390 ath11k-firmware-qcn9074 ath11k-firmware-wcn6750 ath11k-firmware-wcn6855 ath12k-firmware-wcn7850 ath6k-firmware ath9k-htc-firmware brcmfmac-firmware-4329-sdio brcmfmac-firmware-4339-sdio brcmfmac-firmware-43430a0-sdio brcmfmac-firmware-43456-sdio brcmfmac-firmware-4356-sdio brcmfmac-firmware-43602a1-pcie brcmfmac-firmware-4366b1-pcie brcmfmac-firmware-4366c0-pcie-k3 brcmfmac-firmware-43752-sdio brcmfmac-firmware-usb brcmfmac-nvram-43430-sdio brcmfmac-nvram-43455-sdio brcmfmac-nvram-43456-sdio brcmfmac-nvram-4356-sdio brcmfmac-nvram-43752-sdio brcmsmac-firmware broadcom-4306-sprom broadcom-43112-sprom broadcom-43131-sprom broadcom-4313-sprom broadcom-4318-sprom broadcom-43217-sprom broadcom-4321-sprom broadcom-43222-sprom broadcom-43224-sprom broadcom-43225-sprom broadcom-43226-sprom broadcom-43227-sprom broadcom-43228-sprom broadcom-4322-sprom broadcom-4331-sprom broadcom-43428-sprom broadcom-4360-sprom broadcom-6362-sprom carl9170-firmware cypress-firmware-43012-sdio cypress-firmware-43340-sdio cypress-firmware-43362-sdio cypress-firmware-4339-sdio cypress-firmware-43430-sdio cypress-firmware-43439-sdio cypress-firmware-43455-sdio cypress-firmware-4354-sdio cypress-firmware-4356-pcie cypress-firmware-4356-sdio cypress-firmware-43570-pcie cypress-firmware-4373-pcie cypress-firmware-4373-sdio cypress-firmware-4373-usb cypress-firmware-54591-pcie cypress-firmware-54591-sdio cypress-firmware-55560-pcie cypress-firmware-55572-pcie cypress-firmware-55572-sdio cypress-nvram-4339-sdio dvb-firmware e100-firmware edgeport-firmware eip197-mini-firmware ibt-firmware iwl3945-firmware iwl4965-firmware iwlwifi-firmware-ax200 iwlwifi-firmware-ax210 iwlwifi-firmware-iwl1000 iwlwifi-firmware-iwl100 iwlwifi-firmware-iwl105 iwlwifi-firmware-iwl135 iwlwifi-firmware-iwl2000 iwlwifi-firmware-iwl2030 iwlwifi-firmware-iwl3160 iwlwifi-firmware-iwl3168 iwlwifi-firmware-iwl5000 iwlwifi-firmware-iwl5150 iwlwifi-firmware-iwl6000g2 iwlwifi-firmware-iwl6000g2a iwlwifi-firmware-iwl6000g2b iwlwifi-firmware-iwl6050 iwlwifi-firmware-iwl7260 iwlwifi-firmware-iwl7265 iwlwifi-firmware-iwl7265d iwlwifi-firmware-iwl8260c iwlwifi-firmware-iwl8265 iwlwifi-firmware-iwl9000 iwlwifi-firmware-iwl9260 kmod-3c59x kmod-6lowpan kmod-ag71xx kmod-alx kmod-ar5523 kmod-at86rf230 kmod-ath10k kmod-ath10k-ct kmod-ath10k-ct-smallbuffers kmod-ath10k-sdio kmod-ath10k-smallbuffers kmod-ath11k kmod-ath11k-pci kmod-ath12k kmod-ath5k kmod-ath6kl kmod-ath6kl-sdio kmod-ath6kl-usb kmod-ath9k-common kmod-atl1 kmod-atl1c kmod-atl1e kmod-atl2 kmod-atm kmod-atusb kmod-b43 kmod-b44 kmod-bcma kmod-be2net kmod-bnxt-en kmod-brcmfmac kmod-brcmsmac kmod-brcmutil kmod-ca8210 kmod-carl9170 kmod-cc2520 kmod-cfg80211 kmod-crypto-michael-mic kmod-dm9000 kmod-dummy kmod-e100 kmod-eeprom-93cx6 kmod-et131x kmod-ethoc kmod-fakelb kmod-fixed-phy kmod-hfcmulti kmod-hfcpci kmod-ieee802154 kmod-ieee802154-6lowpan kmod-ifb kmod-ipvlan kmod-iwlwifi kmod-lan743x kmod-lib-cordic kmod-lib-crc8 kmod-lib-crc-itu-t kmod-mac80211 kmod-mac80211-hwsim kmod-mac802154 kmod-mdio-gpio kmod-mhi-net kmod-mhi-wwan-ctrl kmod-mhi-wwan-mbim kmod-misdn kmod-mrf24j40 kmod-mt7601u kmod-mt7603 kmod-mt7615-common kmod-mt7615e kmod-mt7615-firmware kmod-mt7622-firmware kmod-mt7663-firmware-ap kmod-mt7663-firmware-sta kmod-mt7663s kmod-mt7663u kmod-mt7663-usb-sdio kmod-mt76-core kmod-mt76x0e kmod-mt76x2-common kmod-mt7915e kmod-mt7925e kmod-mt7925-firmware kmod-mt7925u kmod-mt7992-23-firmware kmod-mt7992-firmware kmod-mt7996-233-firmware kmod-mt7996e kmod-mt7996-firmware-common kmod-mtk-t7xx kmod-mwifiex-pcie kmod-mwifiex-sdio kmod-mwl8k kmod-natsemi kmod-ne2k-pci kmod-niu kmod-owl-loader kmod-phy-airoha-en8811h kmod-phy-aquantia kmod-phy-at803x kmod-phy-bcm84881 kmod-phy-broadcom kmod-phylib-broadcom kmod-phy-marvell-10g kmod-phy-microchip kmod-phy-realtek kmod-phy-smsc kmod-qlcnic kmod-r6040 kmod-regmap-spi kmod-rmnet kmod-rsi91x kmod-rsi91x-sdio kmod-rsi91x-usb kmod-rt2800-lib kmod-rt2800-mmio kmod-rt2800-pci kmod-rt2800-usb kmod-rt2x00-lib kmod-rt2x00-mmio kmod-rt2x00-pci kmod-rt2x00-usb kmod-rt61-pci kmod-rt73-usb kmod-rtl8192c-common kmod-rtl8192ce kmod-rtl8192cu kmod-rtl8192de kmod-rtl8192se kmod-rtl8723bs kmod-rtl8812au-ct kmod-rtl8821ae kmod-rtl8xxxu kmod-rtlwifi kmod-rtlwifi-btcoexist kmod-rtlwifi-pci kmod-rtlwifi-usb kmod-rtw88 kmod-rtw88-8723de kmod-rtw88-8723ds kmod-rtw88-8723du kmod-rtw88-8812au kmod-rtw88-8821au kmod-rtw88-8821ce kmod-rtw88-8821cu kmod-rtw88-8822be kmod-rtw88-8822bu kmod-rtw88-8822ce kmod-rtw88-8822cu kmod-rtw89-8851be kmod-rtw89-8852ae kmod-rtw89-8852be kmod-rtw89-8852ce kmod-rtw89-8922ae kmod-sfc kmod-sfc-falcon kmod-sfp kmod-siit kmod-sis190 kmod-sis900 kmod-skge kmod-sky2 kmod-solos-pci kmod-spi-ks8995 kmod-ssb kmod-swconfig kmod-switch-ip17xx kmod-switch-rtl8306 kmod-thermal kmod-usb-atm kmod-usb-atm-cxacru kmod-usb-atm-speedtouch kmod-usb-atm-ueagle kmod-usb-cm109 kmod-usb-hid-cp2112 kmod-usb-net-dm9601-ether kmod-usb-net-mcs7830 kmod-usb-net-smsc95xx kmod-usb-net-sr9700 kmod-via-rhine kmod-wil6210 kmod-wl12xx kmod-wl18xx kmod-wlcore libertas-sdio-firmware libertas-spi-firmware libertas-usb-firmware midisport-firmware mt7601u-firmware mt7622bt-firmware mt7921bt-firmware mt7922bt-firmware mt7981-wo-firmware mt7986-wo-firmware mwifiex-pcie-firmware mwifiex-sdio-firmware mwl8k-firmware p54-pci-firmware p54-spi-firmware p54-usb-firmware r8152-firmware r8169-firmware radeon-firmware rs9113-firmware rt2800-pci-firmware rt2800-usb-firmware rt61-pci-firmware rt73-usb-firmware rtl8188eu-firmware rtl8192ce-firmware rtl8192cu-firmware rtl8192de-firmware rtl8192eu-firmware rtl8192se-firmware rtl8723au-firmware rtl8723bu-firmware rtl8761a-firmware rtl8761b-firmware rtl8761bu-firmware rtl8821ae-firmware rtl8821ce-firmware rtl8822be-firmware rtl8822ce-firmware ti-3410-firmware ti-5052-firmware wil6210-firmware wl12xx-firmware wl18xx-firmware wpad-openssl --force-depends
    clear
    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回主菜单..." || echo "Press Enter to return to main menu...")"
    show_menu
}

# 8. IPv6 开关
configure_ipv6() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[IPv6 设置]\e[0m"
    else
        color_output "\e[34m[IPv6 Settings]\e[0m"
    fi
    
    # 检查是否为 PPPoE 模式
    local wan_proto=$(uci -q get network.wan.proto)
    if [ "$wan_proto" != "pppoe" ]; then
        if [[ "$LANG_CHOICE" == "zh" ]]; then
            color_output "\e[31m错误: 无法开启 IPv6\e[0m"
            color_output "\e[31m当前上网方式为: $wan_proto\e[0m"
            color_output "\e[31m请先切换为 PPPoE 模式\e[0m"
        else
            color_output "\e[31mError: Cannot enable IPv6\e[0m"
            color_output "\e[31mCurrent connection type: $wan_proto\e[0m"
            color_output "\e[31mPlease switch to PPPoE mode first\e[0m"
        fi
        read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回菜单..." || echo "Press Enter to return to menu...")"
        show_menu
        return
    fi
    
    # 检查当前状态
    local current_ra=$(uci -q get dhcp.lan.ra)
    local current_dhcpv6=$(uci -q get dhcp.lan.dhcpv6)
    local current_ndp=$(uci -q get dhcp.lan.ndp)
    local current_filter_aaaa=$(uci -q get dhcp.@dnsmasq[0].filter_aaaa)
    
    if [ "$current_ra" = "server" ] && [ "$current_dhcpv6" = "server" ]; then
        status_text=$([[ "$LANG_CHOICE" == "zh" ]] && echo "已开启" || echo "Enabled")
    else
        status_text=$([[ "$LANG_CHOICE" == "zh" ]] && echo "已关闭" || echo "Disabled")
    fi
    
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[36m当前 IPv6 状态: $status_text\e[0m"
        color_output "\e[36m请选择操作：\e[0m"
        color_output "1. 开启 IPv6"
        color_output "2. 关闭 IPv6"
        color_output "0. 返回主菜单"
    else
        color_output "\e[36mCurrent IPv6 Status: $status_text\e[0m"
        color_output "\e[36mSelect operation:\e[0m"
        color_output "1. Enable IPv6"
        color_output "2. Disable IPv6"
        color_output "0. Back to Main Menu"
    fi
    
    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "请输入选择 [0-2]: " || echo "Enter your choice [0-2]: ")" ipv6_choice
    
    case "$ipv6_choice" in
        1)
            # 开启 IPv6
            # RA 服务设置为服务模式
            uci set dhcp.lan.ra='server'
            # DHCPv6 服务设置为服务模式
            uci set dhcp.lan.dhcpv6='server'
            # IPv6 分配长度设置为64
            uci set dhcp.lan.ndp='64'
            # 取消过滤 IPv6 AAAA 记录
            uci set dhcp.@dnsmasq[0].filter_aaaa='0'
            # 保存设置
            uci commit dhcp
            
            # 重启相关服务（重定向输出）
            /etc/init.d/odhcpd restart >/dev/null 2>&1
            /etc/init.d/dnsmasq restart >/dev/null 2>&1
            
            if [[ "$LANG_CHOICE" == "zh" ]]; then
                color_output "\e[32mIPv6 已开启！\e[0m"
                color_output "\e[32m- RA 服务: 服务模式\e[0m"
                color_output "\e[32m- DHCPv6 服务: 服务模式\e[0m"
                color_output "\e[32m- IPv6 分配长度: 64\e[0m"
                color_output "\e[32m- IPv6 AAAA 记录过滤: 已关闭\e[0m"
            else
                color_output "\e[32mIPv6 enabled!\e[0m"
                color_output "\e[32m- RA Service: server\e[0m"
                color_output "\e[32m- DHCPv6 Service: server\e[0m"
                color_output "\e[32m- IPv6 Prefix Length: 64\e[0m"
                color_output "\e[32m- IPv6 AAAA Filtering: disabled\e[0m"
            fi
            ;;
            
        2)
            # 关闭 IPv6
            # RA 服务设置为已禁用
            uci set dhcp.lan.ra='disabled'
            # DHCPv6 服务设置为已禁用
            uci set dhcp.lan.dhcpv6='disabled'
            # IPv6 分配长度设置为已禁用
            uci set dhcp.lan.ndp='disabled'
            # 开启过滤 IPv6 AAAA 记录
            uci set dhcp.@dnsmasq[0].filter_aaaa='1'
            # 保存设置
            uci commit dhcp
            
            # 重启相关服务（重定向输出）
            /etc/init.d/odhcpd restart >/dev/null 2>&1
            /etc/init.d/dnsmasq restart >/dev/null 2>&1
            
            if [[ "$LANG_CHOICE" == "zh" ]]; then
                color_output "\e[32mIPv6 已关闭！\e[0m"
                color_output "\e[32m- RA 服务: 已禁用\e[0m"
                color_output "\e[32m- DHCPv6 服务: 已禁用\e[0m"
                color_output "\e[32m- IPv6 分配长度: 已禁用\e[0m"
                color_output "\e[32m- IPv6 AAAA 记录过滤: 已开启\e[0m"
            else
                color_output "\e[32mIPv6 disabled!\e[0m"
                color_output "\e[32m- RA Service: disabled\e[0m"
                color_output "\e[32m- DHCPv6 Service: disabled\e[0m"
                color_output "\e[32m- IPv6 Prefix Length: disabled\e[0m"
                color_output "\e[32m- IPv6 AAAA Filtering: enabled\e[0m"
            fi
            ;;
            
        0)
            show_menu
            return
            ;;
            
        *)
            if [[ "$LANG_CHOICE" == "zh" ]]; then
                color_output "\e[31m无效选择\e[0m"
            else
                color_output "\e[31mInvalid choice\e[0m"
            fi
            ;;
    esac
    
    sleep 2
    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回菜单..." || echo "Press Enter to return to menu...")"
    show_menu
}

# 9. iStoreOS 风格化
istore_style() {
    clear
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[开始安装 iStoreOS 风格化]\e[0m"
    else
        color_output "\e[34m[Installing iStoreOS Styling]\e[0m"
    fi

    # 安装 iStore 商店
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[1/2] 正在安装 iStore 商店...\e[0m"
    else
        color_output "\e[34m[1/2] Installing iStore App Store...\e[0m"
    fi
    wget -qO install.sh https://git.kejizero.online/zhao/files/raw/branch/main/%20Script/iStoreOS/install.sh && chmod +x install.sh && ./install.sh
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[32miStore 商店安装完成\e[0m"
    else
        color_output "\e[32miStore App Store installed\e[0m"
    fi
    
    # 安装网络向导和首页
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[2/2] 正在安装网络向导和首页...\e[0m"
    else
        color_output "\e[34m[2/2] Installing QuickStart and Homepage...\e[0m"
    fi
    is-opkg install luci-i18n-quickstart-zh-cn
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[32m网络向导和首页安装完成\e[0m"
        color_output "\e[32m所有组件安装完成！\e[0m"
    else
        color_output "\e[32mQuickStart and Homepage installed\e[0m"
        color_output "\e[32mAll components installed successfully!\e[0m"
    fi

    # 风格化
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[2/2] 正在风格化...\e[0m"
    else
        color_output "\e[34m[2/2] Stylizing...\e[0m"
    fi
    curl -o /www/luci-static/argon/iconfont.ttf https://script.kejizero.online/Customize/argon/iconfont.ttf
    curl -o /www/luci-static/argon/iconfont.woff https://script.kejizero.online/Customize/argon/iconfont.woff
    curl -o /www/luci-static/argon/iconfont.woff2 https://script.kejizero.online/Customize/argon/iconfont.woff2
    chmod -R 777 /www/luci-static/argon/iconfont.ttf
    chmod -R 777 /www/luci-static/argon/iconfont.woff
    chmod -R 777 /www/luci-static/argon/iconfont.woff2
    curl -s https://script.kejizero.online/Customize/argon/easeicon.css >> /www/luci-static/argon/css/cascade.css
    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回主菜单..." || echo "Press Enter to return to main menu...")"
    show_menu
}

# 10. 检测更新
check_update() {
    if [[ "$LANG_CHOICE" == "zh" ]]; then
        color_output "\e[34m[检测更新]\e[0m"
        color_output "正在检查更新..."
    else
        color_output "\e[34m[Check for Updates]\e[0m"
        color_output "Checking for updates..."
    fi
    
    # 检查 wget 是否安装
    if ! command -v wget >/dev/null 2>&1; then
        if [[ "$LANG_CHOICE" == "zh" ]]; then
            color_output "\e[33m正在安装 wget...\e[0m"
        else
            color_output "\e[33mInstalling wget...\e[0m"
        fi
        opkg update && opkg install wget
    fi
    
    # 创建临时目录
    local temp_dir="/tmp/zerowrt_update"
    mkdir -p "$temp_dir"
    
    # 下载远程版本文件
    if ! wget -q "https://git.kejizero.online/zhao/files/raw/branch/main/bin/version.txt" -O "$temp_dir/version.txt"; then
        if [[ "$LANG_CHOICE" == "zh" ]]; then
            color_output "\e[31m无法连接到更新服务器。\e[0m"
        else
            color_output "\e[31mFailed to connect to update server.\e[0m"
        fi
        rm -rf "$temp_dir"
        read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回菜单..." || echo "Press Enter to return to menu...")"
        show_menu
        return
    fi
    
    # 获取本地版本和远程版本
    local_version=$(cat /root/version.txt 2>/dev/null || echo "0")
    remote_version=$(cat "$temp_dir/version.txt" 2>/dev/null || echo "0")
    
    # 比较版本
    if [ "$local_version" != "$remote_version" ]; then
        if [[ "$LANG_CHOICE" == "zh" ]]; then
            color_output "\e[33m发现新版本：$remote_version\e[0m"
            color_output "\e[33m当前版本：$local_version\e[0m"
            read -p "是否更新到最新版本？(y/n): " confirm
        else
            color_output "\e[33mNew version available: $remote_version\e[0m"
            color_output "\e[33mCurrent version: $local_version\e[0m"
            read -p "Update to the latest version? (y/n): " confirm
        fi
        if [[ "$confirm" == "y" || "$confirm" == "Y" ]]; then
            if [[ "$LANG_CHOICE" == "zh" ]]; then
                color_output "开始下载更新..."
            else
                color_output "Downloading update..."
            fi
            
            # 下载新版本到临时文件
            if wget -q "https://git.kejizero.online/zhao/files/raw/branch/main/bin/ZeroWrt" -O "$temp_dir/ZeroWrt.new"; then
                # 检查文件是否为有效的 shell 脚本
                if head -n1 "$temp_dir/ZeroWrt.new" | grep -q "^#!/bin/bash"; then
                    # 备份当前版本
                    cp /bin/ZeroWrt /bin/ZeroWrt.bak 2>/dev/null
                    
                    # 安装新版本
                    mv "$temp_dir/ZeroWrt.new" /bin/ZeroWrt
                    chmod +x /bin/ZeroWrt
                    
                    # 更新版本文件
                    echo "$remote_version" > /root/version.txt
                    
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[32m更新成功！\e[0m"
                        color_output "\e[32m已备份原版本为 /bin/ZeroWrt.bak\e[0m"
                        color_output "\e[32m请重新运行脚本以应用更新。\e[0m"
                    else
                        color_output "\e[32mUpdate successful!\e[0m"
                        color_output "\e[32mOriginal version backed up as /bin/ZeroWrt.bak\e[0m"
                        color_output "\e[32mPlease rerun the script to apply updates.\e[0m"
                    fi
                    
                    # 清理并退出
                    rm -rf "$temp_dir"
                    exit 0
                else
                    if [[ "$LANG_CHOICE" == "zh" ]]; then
                        color_output "\e[31m下载的文件格式不正确。\e[0m"
                    else
                        color_output "\e[31mDownloaded file is not a valid script.\e[0m"
                    fi
                fi
            else
                if [[ "$LANG_CHOICE" == "zh" ]]; then
                    color_output "\e[31m更新下载失败。\e[0m"
                else
                    color_output "\e[31mUpdate download failed.\e[0m"
                fi
            fi
        else
            if [[ "$LANG_CHOICE" == "zh" ]]; then
                color_output "\e[32m已取消更新。\e[0m"
            else
                color_output "\e[32mUpdate cancelled.\e[0m"
            fi
        fi
    else
        if [[ "$LANG_CHOICE" == "zh" ]]; then
            color_output "\e[32m当前已是最新版本：$local_version\e[0m"
        else
            color_output "\e[32mAlready up to date: $local_version\e[0m"
        fi
    fi
    
    # 清理临时文件
    rm -rf "$temp_dir"
    read -p "$([[ "$LANG_CHOICE" == "zh" ]] && echo "按 Enter 键返回菜单..." || echo "Press Enter to return to menu...")"
    show_menu
} 

# 主程序
select_language
show_agreement
print_header
show_menu
