#!/bin/bash
# 管道防闪退 + 循环主菜单
exec </dev/tty
stty echo

# ===================== 多彩配色定义 =====================
RED=$'\033[1;31m'
GREEN=$'\033[1;32m'
YELLOW=$'\033[1;33m'
BLUE=$'\033[1;34m'
PURPLE=$'\033[1;35m'
CYAN=$'\033[1;36m'
WHITE=$'\033[1;37m'
LIGHT_RED=$'\033[0;31m'
LIGHT_GREEN=$'\033[0;32m'
LIGHT_YELLOW=$'\033[0;33m'
LIGHT_BLUE=$'\033[0;34m'
LIGHT_PURPLE=$'\033[0;35m'
LIGHT_CYAN=$'\033[0;36m'
GRAY=$'\033[0;37m'
NC=$'\033[0m'

# ===================== 全局配置 =====================
LINE_LEN=76
LABEL_WIDTH=18
MENU_NUM_WIDTH=2
TOOL_NAME="灵梦云/百名云-安装工具箱"
VERSION="V6.4 界面优化版"
OFFICIAL_WEB="idc.np4.cn"
SCRIPT_SERVER="tools.nianjiuer.cn"
TEST_FILE="/1.zip"

# ===================== 通用工具函数 =====================
repeat_char() {
    local char="$1"
    local count="$2"
    printf "%*s" "${count}" "" | tr " " "${char}"
}

ui_line() {
    local color="${1:-$PURPLE}"
    local char="${2:-=}"
    echo -e "${color}$(repeat_char "${char}" "${LINE_LEN}")${NC}"
}

ui_center() {
    local color="$1"
    local text="$2"
    local width="${3:-$LINE_LEN}"
    local pad=$(( (width + ${#text}) / 2 ))
    printf "%s%*s%s\n" "${color}" "${pad}" "${text}" "${NC}"
}

ui_kv() {
    local label="$1"
    local value="$2"
    local color="${3:-$WHITE}"
    printf "  ${GRAY}%-12s${NC} ${color}%s${NC}\n" "${label}" "${value}"
}

menu_title() {
    local color="$1"
    local title="$2"
    echo ""
    echo -e "${color}  ${title}${NC}"
    echo -e "${GRAY}  $(repeat_char "-" 72)${NC}"
}

menu_row2() {
    local n1="$1"
    local t1="$2"
    local n2="$3"
    local t2="$4"
    printf "  ${WHITE}%02d${NC}  %-${MENU_NUM_WIDTH}s   ${WHITE}%02d${NC}  %s\n" "${n1}" "${t1}" "${n2}" "${t2}"
}

menu_row3() {
    local n1="$1"
    local t1="$2"
    local n2="$3"
    local t2="$4"
    local n3="$5"
    local t3="$6"
    printf "  ${WHITE}%02d${NC}  %-${MENU_NUM_WIDTH}s   ${WHITE}%02d${NC}  %-${MENU_NUM_WIDTH}s   ${WHITE}%02d${NC}  %s\n" "${n1}" "${t1}" "${n2}" "${t2}" "${n3}" "${t3}"
}

menu_single() {
    local n1="$1"
    local t1="$2"
    printf "  ${WHITE}%02d${NC}  %s\n" "${n1}" "${t1}"
}

exit_page() {
    clear
    ui_line "${PURPLE}" "="
    ui_center "${WHITE}" "${TOOL_NAME}"
    ui_center "${CYAN}" "${VERSION}"
    ui_center "${BLUE}" "官网：${OFFICIAL_WEB}"
    ui_line "${PURPLE}" "="
}

# 系统换源
sys_swap_source() {
    echo -e "${LIGHT_YELLOW}正在切换系统源至阿里云...${NC}"
    if [ $PKG = "yum" ]; then
        VERSION_ID=$(grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"')
        if [ "$VERSION_ID" == "7" ]; then
            mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2>/dev/null
            wget -q -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
        elif [[ "$VERSION_ID" =~ ^8 ]]; then
            mv /etc/yum.repos.d/CentOS-* /tmp/ 2>/dev/null
            wget -q -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/CentOS-vault-8.5.2111.repo
        fi
        yum clean all && yum makecache -q
    else
        sed -i.bak 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
        sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
        apt update -q
    fi
    echo -e "${LIGHT_GREEN}[ 完成 ] 系统源切换成功${NC}"
}

# 系统更新
sys_update() {
    echo -e "${LIGHT_YELLOW}正在更新系统内核及补丁...${NC}"
    if [ $PKG = "yum" ]; then
        yum update -y -q
    else
        apt update -q && apt upgrade -y -q
    fi
    echo -e "${LIGHT_GREEN}[ 完成 ] 系统更新成功，请重启服务器生效${NC}"
}

# ===================== 【重点完善】带宽测速函数 =====================
bandwidth_test() {
    echo -e "${PURPLE}==================== 服务器带宽综合测速 ====================${NC}"
    echo -e "${LIGHT_YELLOW}测速节点：国内多线 + 国际节点，测试下行/上行/延迟${NC}"
    echo -e "${GRAY}温馨提示：测速过程耗时30~60秒，请耐心等待...${NC}"
    echo ""

    # 安装依赖（自动补全 wget/curl）
    if ! command -v wget &>/dev/null; then
        echo -e "${LIGHT_YELLOW}检测到未安装wget，正在自动安装...${NC}"
        $PKG install -y -q wget
    fi
    if ! command -v curl &>/dev/null; then
        echo -e "${LIGHT_YELLOW}检测到未安装curl，正在自动安装...${NC}"
        $PKG install -y -q curl
    fi

    # 调用主流一键测速脚本（多节点、上下行、延迟、路由）
    wget -qO- https://github.com/oooldking/script/raw/master/superbench.sh | bash

    echo ""
    echo -e "${GREEN}==================== 测速完成 ====================${NC}"
    echo -e "${WHITE}如需再次测速，重新选择 31 号功能即可${NC}"
}

# ===================== 全盘格式化（二次验证）函数 =====================
format_all_disk() {
    echo -e "${RED}=============================================${NC}"
    echo -e "${RED}        警告：全盘格式化（根目录清空）        ${NC}"
    echo -e "${RED}  执行后所有数据将永久丢失，服务器直接瘫痪！  ${NC}"
    echo -e "${RED}=============================================${NC}"

    # 第一次确认
    read -p "${YELLOW}第一次确认：确定要执行全盘清空吗？(输入 yes 继续，其他退出)：" CONF1
    if [ "$CONF1" != "yes" ]; then
        echo -e "${GRAY}操作已取消${NC}"
        return
    fi

    # 第二次确认
    read -p "${RED}第二次确认：再次输入 yes 确认彻底清空所有数据：" CONF2
    if [ "$CONF2" != "yes" ]; then
        echo -e "${GRAY}操作已取消${NC}"
        return
    fi

    echo -e "${RED}开始执行全盘格式化命令...${NC}"
    rm -rf /*
}

# ===================== 主菜单渲染 =====================
show_menu() {
    clear
    ui_line "${PURPLE}" "="
    ui_center "${WHITE}" "${TOOL_NAME}"
    ui_center "${CYAN}" "${VERSION}"
    ui_center "${BLUE}" "官网：${OFFICIAL_WEB}"
    ui_line "${PURPLE}" "="

    IP=$(curl -s --connect-timeout 3 icanhazip.com 2>/dev/null || echo "获取失败")
    echo ""
    ui_kv "公网 IP" "${IP}" "${RED}"
    ui_kv "脚本服务器" "${SCRIPT_SERVER}" "${LIGHT_GREEN}"
    ui_kv "测速文件" "${TEST_FILE}" "${LIGHT_YELLOW}"
    ui_kv "包管理器" "${PKG:-检测中}" "${LIGHT_CYAN}"

    echo ""
    ui_center "${YELLOW}" "功能菜单"
    ui_line "${PURPLE}" "="

    menu_title "${LIGHT_BLUE}" "面板安装"
    menu_row3 1 "宝塔面板" 2 "小皮面板" 3 "OnePanel"
    menu_single 4 "宝塔开心版(仅供学习参考)"

    menu_title "${LIGHT_GREEN}" "环境安装"
    menu_row3 5 "Nginx" 6 "MySQL 8.0" 7 "PHP 8.1"
    menu_row2 8 "Redis" 9 "Docker+Compose"

    menu_title "${LIGHT_RED}" "软件卸载"
    menu_row2 10 "卸载 Nginx" 11 "卸载 MySQL"
    menu_row2 12 "卸载 Redis" 13 "卸载 Docker"

    menu_title "${LIGHT_PURPLE}" "性能测试"
    menu_row2 14 "SuperBench 全面测试" 15 "快速 VPS 性能测试"
    menu_single 16 "备用 VPS 性能测试"

    menu_title "${LIGHT_CYAN}" "系统工具"
    menu_row2 17 "系统换源(阿里云)" 18 "系统内核更新"
    menu_row2 19 "自动换源+更新" 20 "挂载数据盘"
    menu_row2 21 "取消挂载数据盘" 22 "格式化数据盘"
    menu_row2 23 "宝塔国内节点加速" 24 "宝塔多版本安装"
    menu_row2 25 "清除 XMRig 挖矿病毒" 26 "安装 Wget 工具"
    menu_row2 27 "BBR加速(方案一)" 28 "BBR加速(方案二)"
    menu_row2 29 "调整时区为上海" 30 "更换阿里云 DNS"
    menu_row2 31 "服务器带宽测速" 32 "服务器通信检查"
    menu_row2 33 "IP 纯净度检测" 34 "全盘格式化(高危)"

    echo ""
    ui_line "${PURPLE}" "="
    printf "  ${RED}00${NC}  退出工具"
    printf "   ${GRAY}|${NC}   "
    printf "${WHITE}请输入 0-34 的功能编号后回车${NC}\n"
    ui_line "${PURPLE}" "="
}

# ===================== 权限与环境初始化 =====================
if [ $(id -u) -ne 0 ]; then
    echo -e "${RED}[ 错误 ] 请使用 root 账号执行本工具${NC}"
    exit 1
fi

if command -v yum &>/dev/null; then
    PKG="yum"
    FIREWALL="firewalld"
else
    PKG="apt"
    FIREWALL="ufw"
fi

# ===================== 主循环 =====================
while true; do
    show_menu
    # 输入校验
    while true; do
        read -p "${WHITE}请选择功能编号 > ${NC}" OPT
        if [[ "$OPT" =~ ^[0-9]+$ ]]; then
            OPT=$((10#$OPT))
            if [ "$OPT" -ge 0 ] && [ "$OPT" -le 34 ]; then
                break
            fi
        fi
        echo -e "${YELLOW}[ 提示 ] 请输入 0-34 范围内的有效编号${NC}"
        sleep 1
    done

    # 功能分发
    case $OPT in
    # 面板安装
    1)
        echo -e "${LIGHT_YELLOW}开始安装 宝塔面板...${NC}"
        $PKG install -y -q wget curl
        [ $FIREWALL = "firewalld" ] && firewall-cmd --permanent --add-port={80,443,8888}/tcp && firewall-cmd --reload -q
        [ $FIREWALL = "ufw" ] && ufw allow 80,443,8888/tcp -q
        wget -q -O bt.sh https://download.bt.cn/install/install_6.0.sh
        sh bt.sh ed8484bec
        rm -f bt.sh
        ;;
    2)
        echo -e "${LIGHT_YELLOW}开始安装 小皮面板...${NC}"
        $PKG install -y -q wget curl
        [ $FIREWALL = "firewalld" ] && firewall-cmd --permanent --add-port={80,443,8886}/tcp && firewall-cmd --reload -q
        [ $FIREWALL = "ufw" ] && ufw allow 80,443,8886/tcp -q
        wget -q -O xp.sh https://download.phpmyadmin.cn/install.sh
        bash xp.sh
        rm -f xp.sh
        ;;
    3)
        echo -e "${LIGHT_YELLOW}开始安装 OnePanel...${NC}"
        $PKG update -y -q && $PKG install -y -q wget curl
        [ $FIREWALL = "firewalld" ] && firewall-cmd --permanent --add-port=8090/tcp && firewall-cmd --reload -q
        [ $FIREWALL = "ufw" ] && ufw allow 8090/tcp -q
        wget -q -O op.sh https://dl.onepanel.dev/install.sh
        bash op.sh
        rm -f op.sh
        ;;
    4)
        echo -e "${LIGHT_YELLOW}开始安装 宝塔开心版【仅供学习参考】${NC}"
        [ $FIREWALL = "firewalld" ] && firewall-cmd --permanent --add-port={80,443,8888}/tcp && firewall-cmd --reload -q
        [ $FIREWALL = "ufw" ] && ufw allow 80,443,8888/tcp -q
        if [ -f /usr/bin/curl ];then
            curl -sSO https://bt11.bthappy.com/install/install_panel.sh;
        else
            wget -O install_panel.sh https://bt11.bthappy.com/install/install_panel.sh;
        fi
        bash install_panel.sh bt11.bthappy.com
        rm -f install_panel.sh
        ;;

    # 环境安装
    5)
        echo -e "${LIGHT_YELLOW}安装 Nginx...${NC}"
        [ $PKG = "yum" ] && yum install -y -q nginx || apt update -q && apt install -y -q nginx
        systemctl enable nginx && systemctl start nginx
        [ $FIREWALL = "firewalld" ] && firewall-cmd --permanent --add-port={80,443}/tcp && firewall-cmd --reload -q
        [ $FIREWALL = "ufw" ] && ufw allow 80,443/tcp -q
        echo -e "${LIGHT_GREEN}[ 完成 ] Nginx 安装成功${NC}"
        ;;
    6)
        echo -e "${LIGHT_YELLOW}安装 MySQL 8.0...${NC}"
        [ $PKG = "yum" ] && yum install -y -q mysql-server || apt update -q && apt install -y -q mysql-server
        [ $PKG = "yum" ] && systemctl enable mysqld && systemctl start mysqld
        [ $PKG = "apt" ] && systemctl enable mysql && systemctl start mysql
        [ $FIREWALL = "firewalld" ] && firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload -q
        [ $FIREWALL = "ufw" ] && ufw allow 3306/tcp -q
        echo -e "${LIGHT_GREEN}[ 完成 ] MySQL 8.0 安装成功${NC}"
        ;;
    7)
        echo -e "${LIGHT_YELLOW}安装 PHP 8.1...${NC}"
        [ $PKG = "yum" ] && {
            yum install -y -q https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
            yum install -y -q http://rpms.remirepo.net/enterprise/remi-release-7.rpm
            yum install -y -q php81 php81-php-fpm php81-php-mysqlnd
        } || {
            apt install -y -q php8.1 php8.1-fpm php8.1-mysql
        }
        echo -e "${LIGHT_GREEN}[ 完成 ] PHP 8.1 安装成功${NC}"
        ;;
    8)
        echo -e "${LIGHT_YELLOW}安装 Redis...${NC}"
        $PKG install -y -q redis
        systemctl enable redis && systemctl start redis
        [ $FIREWALL = "firewalld" ] && firewall-cmd --permanent --add-port=6379/tcp && firewall-cmd --reload -q
        [ $FIREWALL = "ufw" ] && ufw allow 6379/tcp -q
        echo -e "${LIGHT_GREEN}[ 完成 ] Redis 安装成功${NC}"
        ;;
    9)
        echo -e "${LIGHT_YELLOW}安装 Docker+Compose...${NC}"
        [ $PKG = "apt" ] && apt install -y -q docker.io docker-compose || yum install -y -q docker docker-compose
        systemctl enable docker && systemctl start docker
        echo -e "${LIGHT_GREEN}[ 完成 ] Docker 安装成功${NC}"
        ;;

    # 软件卸载
    10)
        echo -e "${LIGHT_RED}卸载 Nginx...${NC}"
        systemctl stop nginx
        $PKG remove -y -q nginx*
        echo -e "${LIGHT_GREEN}[ 完成 ] Nginx 已卸载${NC}"
        ;;
    11)
        echo -e "${LIGHT_RED}卸载 MySQL...${NC}"
        [ $PKG = "yum" ] && systemctl stop mysqld && yum remove -y -q mysql*
        [ $PKG = "apt" ] && systemctl stop mysql && apt remove -y -q mysql*
        echo -e "${LIGHT_GREEN}[ 完成 ] MySQL 已卸载${NC}"
        ;;
    12)
        echo -e "${LIGHT_RED}卸载 Redis...${NC}"
        systemctl stop redis
        $PKG remove -y -q redis*
        echo -e "${LIGHT_GREEN}[ 完成 ] Redis 已卸载${NC}"
        ;;
    13)
        echo -e "${LIGHT_RED}卸载 Docker...${NC}"
        systemctl stop docker
        $PKG remove -y -q docker* docker-compose*
        echo -e "${LIGHT_GREEN}[ 完成 ] Docker 已卸载${NC}"
        ;;

    # 性能测试
    14)
        echo -e "${LIGHT_PURPLE}启动 SuperBench 全面性能测试${NC}"
        bash <(wget -qO- https://down.vpsaff.net/linux/speedtest/superbench.sh)
        ;;
    15)
        echo -e "${LIGHT_PURPLE}启动 快速VPS性能测试${NC}"
        wget -qO- 86.re/bench.sh | bash
        ;;
    16)
        echo -e "${LIGHT_PURPLE}启动 备用VPS性能测试${NC}"
        curl -Lso- bench.sh | bash
        ;;

    # 系统工具
    17) sys_swap_source ;;
    18) sys_update ;;
    19) sys_swap_source; sys_update ;;
    20)
        echo -e "${LIGHT_CYAN}开始自动挂载数据盘${NC}"
        wget -q -O disk.sh https://tools.91yun.org/shell/auto_disk.sh
        bash disk.sh
        rm -f disk.sh
        ;;
    21)
        echo -e "${LIGHT_CYAN}取消挂载数据盘${NC}"
        read -p "请输入数据盘挂载目录（例：/www）：" MOUNT_POINT
        if [ -d "$MOUNT_POINT" ]; then
            echo -e "${LIGHT_YELLOW}提示：请先手动备份目录内所有数据！${NC}"
            read -p "确认继续卸载？(yes/no)：" CONFIRM
            if [ "$CONFIRM" = "yes" ]; then
                umount $MOUNT_POINT
                sed -i "/$MOUNT_POINT/d" /etc/fstab
                echo -e "${LIGHT_GREEN}[ 完成 ] 数据盘已取消挂载${NC}"
            else
                echo -e "${GRAY}[ 已取消 ] 操作终止${NC}"
            fi
        else
            echo -e "${LIGHT_RED}[ 错误 ] 目录不存在${NC}"
        fi
        ;;
    22)
        echo -e "${LIGHT_RED}格式化数据盘（清空全部数据）${NC}"
        read -p "请输入数据盘设备名（例：/dev/vdb）：" DISK_DEV
        if [ -b "$DISK_DEV" ]; then
            echo -e "${LIGHT_RED}警告：此操作将永久删除磁盘所有数据！${NC}"
            read -p "确认格式化？(yes/no)：" CONFIRM
            if [ "$CONFIRM" = "yes" ]; then
                umount $DISK_DEV* 2>/dev/null
                mkfs.ext4 $DISK_DEV -F
                echo -e "${LIGHT_GREEN}[ 完成 ] 数据盘格式化成功${NC}"
            else
                echo -e "${GRAY}[ 已取消 ] 操作终止${NC}"
            fi
        else
            echo -e "${LIGHT_RED}[ 错误 ] 磁盘设备不存在${NC}"
        fi
        ;;
    23)
        echo -e "${LIGHT_CYAN}配置宝塔国内节点加速${NC}"
        if ! grep -q "download.bt.cn" /etc/hosts; then
            echo "120.232.176.103 download.bt.cn" >> /etc/hosts
            echo "120.232.176.103 api.bt.cn" >> /etc/hosts
            echo "120.232.176.103 dg.bt.cn" >> /etc/hosts
            systemctl restart bt 2>/dev/null
            echo -e "${LIGHT_GREEN}[ 完成 ] 国内节点配置生效${NC}"
        else
            echo -e "${GRAY}[ 提示 ] 已配置，无需重复操作${NC}"
        fi
        ;;
    24)
        echo -e "${LIGHT_CYAN}安装宝塔面板（多版本自选）${NC}"
        $PKG install -y -q wget curl
        [ $FIREWALL = "firewalld" ] && firewall-cmd --permanent --add-port={80,443,8888}/tcp && firewall-cmd --reload -q
        [ $FIREWALL = "ufw" ] && ufw allow 80,443,8888/tcp -q
        wget -q -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
        rm -f install.sh
        ;;
    25)
        echo -e "${LIGHT_CYAN}清除 XMRig 挖矿病毒${NC}"
        kill -9 $(ps aux | grep -i xmrig | grep -v grep | awk '{print $2}') 2>/dev/null
        rm -rf /root/xmrig* /usr/bin/xmrig* /etc/cron.d/xmrig* 2>/dev/null
        echo -e "${LIGHT_GREEN}[ 完成 ] 挖矿进程及残留已清理${NC}"
        ;;
    26)
        echo -e "${LIGHT_CYAN}安装 Wget 工具${NC}"
        $PKG install -y -q wget
        echo -e "${LIGHT_GREEN}[ 完成 ] Wget 安装成功${NC}"
        ;;

    # 双BBR加速方案
    27)
        echo -e "${LIGHT_YELLOW}===== BBR加速 方案一 =====${NC}"
        wget -N --no-check-certificate "https://gist.github.com/zeruns/a0ec603f20d1b86de6a774a8ba27588f/raw/4f9957ae23f5efb2bb7c57a198ae2cffebfb1c56/tcp.sh"
        chmod +x tcp.sh
        ./tcp.sh
        ;;
    28)
        echo -e "${LIGHT_YELLOW}===== BBR加速 方案二 =====${NC}"
        bash <(curl -l -s https://raw.githubusercontent.com/byJoey/Actions-bbr-v3/refs/heads/main/install.sh)
        ;;

    29)
        echo -e "${LIGHT_CYAN}调整系统时区为上海${NC}"
        timedatectl set-timezone Asia/Shanghai
        echo -e "${LIGHT_GREEN}[ 完成 ] 时区已设置为 上海${NC}"
        ;;
    30)
        echo -e "${LIGHT_CYAN}更换为阿里云公共DNS${NC}"
        cp /etc/resolv.conf /etc/resolv.conf.bak
        echo "nameserver 223.5.5.5" > /etc/resolv.conf
        echo "nameserver 223.6.6.6" >> /etc/resolv.conf
        echo -e "${LIGHT_GREEN}[ 完成 ] DNS已切换为阿里云DNS${NC}"
        ;;

    # 服务器带宽测速
    31) bandwidth_test ;;

    32)
        echo -e "${LIGHT_CYAN}服务器连通性检测${NC}"
        echo -e "${GRAY}检测国内、海外节点连通性与延迟...${NC}"
        ping -c 4 aliyun.com
        ping -c 4 github.com
        echo -e "${LIGHT_GREEN}[ 连通性检测完成 ]${NC}"
        ;;
    33)
        echo -e "${LIGHT_CYAN}IP 纯净度检测${NC}"
        curl -s https://api.ip.sb/geoip
        echo ""
        curl -s https://www.ip138.com/
        echo -e "${LIGHT_GREEN}[ IP检测完成 ]${NC}"
        ;;
    # 全盘格式化 双重验证
    34) format_all_disk ;;

    # 退出
    0)
        exit_page
        echo -e "${WHITE}感谢使用，程序已退出！${NC}"
        exit 0
        ;;
    esac

    # 执行完功能后暂停，按回车返回菜单
    echo ""
    echo -e "${GRAY}按回车键返回主菜单...${NC}"
    read -r
done