#!/bin/bash

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${YELLOW}>>> 开始执行 Mihomo (Clash) 安装与配置...${NC}"

# 1. 环境准备
echo -e "${YELLOW}>>> 1. 更新系统并安装必要工具...${NC}"
sudo apt update && sudo apt install -y curl wget jq gzip || { echo -e "${RED}依赖安装失败${NC}"; exit 1; }

# 2. 检查并获取二进制文件
BINARY_GZ="mihomo-linux-amd64.gz"
BINARY_NAME="mihomo-linux-amd64"
TARGET_BINARY="/usr/local/bin/mihomo"
RELEASE_URL="https://github.com/MetaCubeX/mihomo/releases/download/v1.19.23/mihomo-linux-amd64-v1-v1.19.23.gz"

if [ ! -f "$BINARY_GZ" ]; then
    echo -e "${YELLOW}>>> 2. 未检测到本地二进制包，正在下载...${NC}"
    wget -O "$BINARY_GZ" "$RELEASE_URL" || { echo -e "${RED}下载失败${NC}"; exit 1; }
else
    echo -e "${GREEN}✅ 检测到本地二进制包，跳过下载${NC}"
fi

# 解压并安装
echo -e "${YELLOW}>>> 正在解压并安装 Mihomo...${NC}"
gzip -d -f "$BINARY_GZ" || { echo -e "${RED}解压失败${NC}"; exit 1; }

if [ ! -f "$BINARY_NAME" ]; then
    echo -e "${RED}解压后的文件不存在${NC}"
    exit 1
fi

chmod +x "$BINARY_NAME"
sudo mv "$BINARY_NAME" "$TARGET_BINARY"

# 验证安装
echo -e "${YELLOW}>>> 验证安装版本：${NC}"
"$TARGET_BINARY" -v

# 3. 部署配置文件
CONFIG_DIR="/etc/mihomo"
CONFIG_FILE="$CONFIG_DIR/config.yaml"

echo -e "${YELLOW}>>> 3. 部署配置文件...${NC}"
sudo mkdir -p "$CONFIG_DIR"

if [ ! -f "config.yaml" ]; then
    echo -e "${RED}错误：当前目录下缺少 config.yaml 文件${NC}"
    exit 1
fi

sudo cp "config.yaml" "$CONFIG_FILE"
sudo chown -R $(whoami) "$CONFIG_DIR" # 确保当前用户有权限读取（服务通常以root运行，但方便后续修改）

# 4. 创建 Systemd 服务
SERVICE_FILE="/etc/systemd/system/mihomo.service"

echo -e "${YELLOW}>>> 4. 创建 Systemd 服务文件...${NC}"
cat << 'EOF' | sudo tee "$SERVICE_FILE" > /dev/null
[Unit]
Description=Mihomo Proxy
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo -f /etc/mihomo/config.yaml
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# 重载并启动服务
echo -e "${YELLOW}>>> 启动 Mihomo 服务...${NC}"
sudo systemctl daemon-reload
sudo systemctl start mihomo
sudo systemctl enable mihomo

# 检查状态
if sudo systemctl is-active --quiet mihomo; then
    echo -e "${GREEN}✅ Mihomo 服务已成功启动并设置为开机自启${NC}"
else
    echo -e "${RED}⚠️ Mihomo 服务启动可能存在异常，请检查日志 (journalctl -u mihomo)${NC}"
fi

# 5. 创建便捷代理脚本 (proxy.sh)
PROXY_SCRIPT="$HOME/proxy.sh"
BASHRC_FILE="$HOME/.bashrc"
APT_CONF_FILE="/etc/apt/apt.conf.d/99proxy"

echo -e "${YELLOW}>>> 5. 配置终端便捷代理脚本...${NC}"

cat > "$PROXY_SCRIPT" << 'EOF'
#!/bin/bash

# 配置区域
PROXY_ADDR="127.0.0.1:7890"  # 你的代理地址和端口
APT_CONF_FILE="/etc/apt/apt.conf.d/99proxy"

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 开启代理
function start_proxy() {
    echo -e "${YELLOW}>>> 正在开启代理...${NC}"
    
    # 1. 设置当前 Shell 的环境变量
    export http_proxy="http://${PROXY_ADDR}"
    export https_proxy="http://${PROXY_ADDR}"
    export HTTP_PROXY="http://${PROXY_ADDR}"
    export HTTPS_PROXY="http://${PROXY_ADDR}"
    export no_proxy="localhost,127.0.0.1,::1"
    export NO_PROXY="localhost,127.0.0.1,::1"
    
    # 2. 配置 APT 代理 (方便 apt install)
    # 使用 tee 写入文件，需要 sudo 权限
    echo "Acquire::http::proxy \"http://${PROXY_ADDR}/\";" | sudo tee ${APT_CONF_FILE} > /dev/null
    echo "Acquire::https::proxy \"http://${PROXY_ADDR}/\";" | sudo tee -a ${APT_CONF_FILE} > /dev/null
    
    echo -e "${GREEN}✅ 代理已开启 (端口: ${PROXY_ADDR})${NC}"
    echo -e "${GREEN}✅ APT 代理已配置${NC}"
    
    # 简单验证
    echo -e "${YELLOW}>>> 测试连通性 (访问 Google)...${NC}"
    curl -I -s --connect-timeout 3 https://www.google.com | head -n 1
}

# 关闭代理
function stop_proxy() {
    echo -e "${YELLOW}>>> 正在关闭代理...${NC}"
    
    # 1. 清除环境变量
    unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY no_proxy NO_PROXY
    
    # 2. 删除 APT 代理配置
    if [ -f "${APT_CONF_FILE}" ]; then
        sudo rm -f ${APT_CONF_FILE}
        echo -e "${GREEN}✅ APT 代理配置已移除${NC}"
    fi
    
    echo -e "${GREEN}✅ 代理已完全关闭${NC}"
}

# 检查参数
case "$1" in
    on)
        start_proxy
        ;;
    off)
        stop_proxy
        ;;
    *)
        echo -e "${RED}用法: $0 {on|off}${NC}"
        echo "  $0 on   - 开启当前终端及 APT 代理"
        echo "  $0 off  - 关闭当前终端及 APT 代理"
        exit 1
        ;;
esac
EOF

chmod +x "$PROXY_SCRIPT"

# 6. 配置 .bashrc 函数
echo -e "${YELLOW}>>> 6. 配置 .bashrc 快捷命令...${NC}"

# 检查是否已存在 proxy 函数，避免重复
if ! grep -q "proxy()" "$BASHRC_FILE"; then
    cat >> "$BASHRC_FILE" << 'EOF'

# 代理快捷函数
proxy() {
    case "$1" in
        on|off)
            # 直接执行脚本逻辑
            source ~/proxy.sh "$1"
            ;;
        *)
            echo "用法: proxy {on|off}"
            ;;
    esac
}
EOF
    echo -e "${GREEN}✅ 已添加 proxy 函数到 .bashrc${NC}"
else
    echo -e "${YELLOW}⚠️ .bashrc 中已存在 proxy 函数，跳过写入${NC}"
fi

# 立即生效
source "$BASHRC_FILE"

echo -e "${GREEN}🎉 安装与配置完成！${NC}"
echo "你可以直接使用以下命令："
echo "  proxy on   # 开启代理"
echo "  proxy off  # 关闭代理"
