#!/bin/bash

# 1. 颜色与基础设置
# 检测终端是否支持颜色
if [ -t 1 ]; then
    B_CYAN='\033[1;36m'
    B_GREEN='\033[1;32m'
    B_YELLOW='\033[1;33m'
    B_RED='\033[1;31m'
    NC='\033[0m'
else
    # 非交互式终端，禁用颜色
    B_CYAN=''
    B_GREEN=''
    B_YELLOW=''
    B_RED=''
    NC=''
fi
stty erase '^H'

# 2. 菜单
while true; do
    clear
    echo -e "${B_CYAN}##########################################################${NC}"
    echo -e "${B_CYAN}#           VPS 自动化通用代理部署工具 (v5.5)            #${NC}"
    echo -e "${B_CYAN}##########################################################${NC}"
    echo ""
    echo -e "${B_GREEN} 1) 安装代理${NC}"
    echo -e "${B_CYAN} 2) 查看配置${NC}"
    echo -e "${B_RED} 3) 卸载${NC}"
    echo -e "${B_YELLOW} 0) 退出${NC}"
    echo ""
    read -p "选择序号: " choice

    case $choice in
    1)
        # 安装逻辑：保持物理除 6 模式，确保看板必出
        echo -e "${B_CYAN}[处理] 正在安装...${NC}"
        apt-get install -f -y >/dev/null 2>&1
        apt update && apt install -y nginx squid curl
        # 物理切除所有 IPv6 监听
        find /etc/nginx -type f -exec sed -i '/listen \[::\]/d' {} +
        
        cat > /etc/squid/squid.conf <<EOF
http_port 0.0.0.0:9678
acl all_src src 0.0.0.0/0
http_access allow all_src
EOF
        systemctl restart squid
        systemctl restart nginx
        # 等待服务启动
        sleep 2
        
        IP_ADDR=$(curl -s api.ipify.org)
        read -p "$(echo -e "${B_GREEN}访问入口（回车默认使用公网IP）: ${NC}")" local_domain
        [ -z "$local_domain" ] && local_domain=$IP_ADDR
        read -p "$(echo -e "${B_GREEN}目标域名（例如www.google.com): ${NC}")" target_url
        
        if [ -n "$target_url" ]; then
            # 提取完整的目标 URL（包括协议和路径）
            if [[ "$target_url" != http* ]]; then
                target_url="https://$target_url"
            fi
            # 提取主机部分
            target_host=$(echo "$target_url" | sed -e 's|^[^/]*//||' -e 's|/.*$||')
            cat > /etc/nginx/conf.d/vps_proxy.conf <<EOF
server {
    listen 80;
    server_name $local_domain;
    location / {
        proxy_pass $target_url;
        proxy_set_header Host $target_host;
        proxy_ssl_server_name on;
        proxy_buffering off;
    }
}
EOF
            nginx -s reload >/dev/null 2>&1
            # 等待配置加载
            sleep 1
            # 汇总信息看板回归
            echo -e "\n${B_GREEN}==========================================================${NC}"
            echo -e " ${B_CYAN}▶ Squid 端口    :${NC}  ${B_YELLOW}9678${NC}"
            echo -e " ${B_CYAN}▶ 域名访问地址  :${NC}  ${B_YELLOW}http://$local_domain${NC}"
            echo -e " ${B_CYAN}▶ IP访问地址    :${NC}  ${B_YELLOW}http://$IP_ADDR${NC}"
            echo -e " ${B_CYAN}▶ 目标转发域名  :${NC}  ${B_YELLOW}$target_url${NC}"
            echo -e " ${B_CYAN}▶ 配置文件      :${NC}  ${B_YELLOW}/etc/nginx/conf.d/vps_proxy.conf${NC}"
            echo -e "${B_GREEN}==========================================================${NC}"
            echo -e "${B_GREEN}按回车键返回主菜单...${NC}"
            read -n 1 -s
        fi
        ;;    
    2)
        # 查看配置
        echo -e "${B_CYAN}[INFO] 正在查看当前配置...${NC}"
        IP_ADDR=$(curl -s api.ipify.org)
        # 尝试从 nginx 配置中提取信息
        if [ -f /etc/nginx/conf.d/vps_proxy.conf ]; then
            # 只匹配 server_name 行，忽略其他行
            local_domain=$(grep -E '^[[:space:]]*server_name' /etc/nginx/conf.d/vps_proxy.conf | head -n 1 | awk '{print $2}' | sed 's/;//')
            # 只匹配 proxy_pass 行，忽略其他行
            target_url=$(grep -E '^[[:space:]]*proxy_pass' /etc/nginx/conf.d/vps_proxy.conf | head -n 1 | awk '{print $2}' | sed 's/;//')
            # 汇总信息看板
            echo -e "\n${B_GREEN}==========================================================${NC}"
            echo -e " ${B_CYAN}▶ Squid 端口    :${NC}  ${B_YELLOW}9678${NC}"
            echo -e " ${B_CYAN}▶ 域名访问地址  :${NC}  ${B_YELLOW}http://$local_domain${NC}"
            echo -e " ${B_CYAN}▶ IP访问地址    :${NC}  ${B_YELLOW}http://$IP_ADDR${NC}"
            echo -e " ${B_CYAN}▶ 目标转发域名  :${NC}  ${B_YELLOW}$target_url${NC}"
            echo -e " ${B_CYAN}▶ 配置文件      :${NC}  ${B_YELLOW}/etc/nginx/conf.d/vps_proxy.conf${NC}"
            echo -e "${B_GREEN}==========================================================${NC}"
            echo -e "${B_GREEN}按回车键返回主菜单...${NC}"
            read -n 1 -s
        else
            echo -e "${B_RED}还没有配置相关代理服务.....${NC}"
            echo -e "${B_GREEN}按回车键返回主菜单...${NC}"
            read -n 1 -s
        fi
        echo
        ;;
    3)
        echo -e "${B_RED}[警告] 正在执行卸载，将彻底铲除所有数据...${NC}"
        
        # 1. 停止服务并杀死进程
        systemctl stop nginx 2>/dev/null
        systemctl stop squid 2>/dev/null
        pkill -9 nginx 2>/dev/null
        pkill -9 squid 2>/dev/null
        
        # 2. 清除包管理器记录并修复状态
        apt-get purge -y --allow-remove-essential nginx nginx-common nginx-full squid squid-common
        apt-get autoremove -y >/dev/null 2>&1
        apt-get install -f -y >/dev/null 2>&1
        
        echo -e "${B_GREEN}----------------------------------------------------------${NC}"
        echo -e "${B_GREEN}  卸载成功！系统已彻底干净，所有代理残留已物理抹除。  ${NC}"
        echo -e "${B_GREEN}----------------------------------------------------------${NC}"
        sleep 1
        ;;
    0)
        echo -e "${B_YELLOW}退出脚本...${NC}"
        exit 0
        ;;
    *)
        echo -e "${B_RED}无效的选择，请重新输入！${NC}"
        sleep 1
        ;;
    esac
done