#!/bin/bash
# PingTool Guardian 安装脚本 (Linux/Unix)

set -e

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

# 默认安装路径
INSTALL_PATH="${INSTALL_PATH:-/opt/pingtool}"
SERVICE_NAME="443Tool"

# 下载 URL（根据系统架构自动选择）
DOWNLOAD_BASE_URL="https://www.443.cn/download/guardian"

echo -e "${CYAN}========================================"
echo -e "  PingTool Guardian 安装程序"
echo -e "========================================${NC}"
echo ""

# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
    echo -e "${RED}错误: 需要 root 权限运行此脚本${NC}"
    echo -e "${YELLOW}请使用 sudo 运行: sudo $0${NC}"
    exit 1
fi

# 检测系统和架构
ARCH=$(uname -m)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')

echo -e "${CYAN}检测系统信息...${NC}"
echo -e "  操作系统: ${OS}"
echo -e "  CPU架构: ${ARCH}"

case "$ARCH" in
    x86_64|amd64)
        ARCH_NAME="amd64"
        echo -e "  ${GREEN}✓ 检测到 AMD64 架构${NC}"
        ;;
    aarch64|arm64)
        ARCH_NAME="arm64"
        echo -e "  ${GREEN}✓ 检测到 ARM64 架构 (树莓派4/5等)${NC}"
        ;;
    armv7l|armv7)
        ARCH_NAME="armv7"
        echo -e "  ${GREEN}✓ 检测到 ARMv7 架构 (树莓派3/Zero等)${NC}"
        ;;
    armv6l)
        # 树莓派 Zero/1 等老设备
        echo -e "  ${YELLOW}⚠ 检测到 ARMv6 架构${NC}"
        echo -e "  ${YELLOW}由于性能限制，建议使用 ARMv7 版本${NC}"
        ARCH_NAME="armv7"
        ;;
    i386|i686)
        echo -e "${RED}错误: 不支持 32 位 x86 架构${NC}"
        echo -e "${YELLOW}请使用 64 位系统 (x86_64) 或 ARM 设备${NC}"
        exit 1
        ;;
    *)
        echo -e "${RED}错误: 不支持的架构: $ARCH${NC}"
        echo -e "${YELLOW}支持的架构:${NC}"
        echo -e "  - x86_64 (AMD64)"
        echo -e "  - aarch64 (ARM64)"
        echo -e "  - armv7l (ARMv7)"
        exit 1
        ;;
esac

DOWNLOAD_URL="${DOWNLOAD_BASE_URL}/${OS}_${ARCH_NAME}/pingToolAgent"
echo ""

# 检查并下载 pingToolAgent
if [ ! -f "./pingToolAgent" ]; then
    echo -e "${YELLOW}本地未找到 pingToolAgent，从服务器下载...${NC}"
    echo -e "系统: ${OS}, 架构: ${ARCH_NAME}"
    echo -e "下载地址: ${DOWNLOAD_URL}"
    echo ""
    
    # 检查下载工具
    if command -v wget &> /dev/null; then
        DOWNLOAD_CMD="wget -O ./pingToolAgent"
    elif command -v curl &> /dev/null; then
        DOWNLOAD_CMD="curl -L -o ./pingToolAgent"
    else
        echo -e "${RED}错误: 需要 wget 或 curl 来下载文件${NC}"
        echo -e "${YELLOW}请安装其中之一后重试:${NC}"
        echo -e "  Ubuntu/Debian: sudo apt-get install wget"
        echo -e "  CentOS/RHEL: sudo yum install wget"
        exit 1
    fi
    
    # 下载文件
    if $DOWNLOAD_CMD "$DOWNLOAD_URL"; then
        chmod +x ./pingToolAgent
        echo -e "${GREEN}✓ 下载成功${NC}"
    else
        echo -e "${RED}错误: 下载失败${NC}"
        echo ""
        echo -e "${YELLOW}请检查:${NC}"
        echo -e "  1. 网络连接是否正常"
        echo -e "  2. 防火墙是否阻止下载"
        echo -e "  3. 下载地址是否正确"
        echo ""
        echo -e "${YELLOW}您也可以手动下载 pingToolAgent 并放在脚本同目录，然后重新运行此脚本${NC}"
        exit 1
    fi
    echo ""
fi

echo -e "${GREEN}安装路径: $INSTALL_PATH${NC}"
echo ""

# 检查服务是否已存在
if systemctl list-units --full --all | grep -q "$SERVICE_NAME.service"; then
    echo -e "${YELLOW}检测到已安装的服务，正在卸载...${NC}"
    
    if systemctl is-active --quiet $SERVICE_NAME; then
        echo "  - 停止服务..."
        systemctl stop $SERVICE_NAME || true
        sleep 2
    fi
    
    echo "  - 卸载旧服务..."
    if [ -f "$INSTALL_PATH/pingToolAgent" ]; then
        $INSTALL_PATH/pingToolAgent -service uninstall 2>/dev/null || true
    fi
    
    sleep 2
    echo -e "  ${GREEN}✓ 旧服务已卸载${NC}"
    echo ""
fi

# 创建安装目录
echo -e "${YELLOW}1. 创建安装目录...${NC}"
if [ ! -d "$INSTALL_PATH" ]; then
    mkdir -p "$INSTALL_PATH"
    echo -e "  ${GREEN}✓ 目录创建成功: $INSTALL_PATH${NC}"
else
    echo -e "  ${GREEN}✓ 目录已存在: $INSTALL_PATH${NC}"
fi

# 创建日志目录
if [ ! -d "$INSTALL_PATH/logs" ]; then
    mkdir -p "$INSTALL_PATH/logs"
    echo -e "  ${GREEN}✓ 日志目录创建成功${NC}"
else
    echo -e "  ${GREEN}✓ 日志目录已存在${NC}"
fi
echo ""

# 复制文件
echo -e "${YELLOW}2. 复制程序文件...${NC}"
cp ./pingToolAgent "$INSTALL_PATH/"
chmod +x "$INSTALL_PATH/pingToolAgent"
echo -e "  ${GREEN}✓ pingToolAgent 已复制${NC}"

# 复制配置文件（如果存在）
if [ -f "./guardian.yaml" ]; then
    cp ./guardian.yaml "$INSTALL_PATH/"
    echo -e "  ${GREEN}✓ guardian.yaml 已复制${NC}"
fi
echo ""

# 设置权限
echo -e "${YELLOW}3. 设置目录权限...${NC}"
chown -R root:root "$INSTALL_PATH"
chmod -R 755 "$INSTALL_PATH"
echo -e "  ${GREEN}✓ 权限设置完成${NC}"
echo ""

# 安装服务
echo -e "${YELLOW}4. 安装 systemd 服务...${NC}"
cd "$INSTALL_PATH"
./pingToolAgent -service install >/dev/null 2>&1 || true
echo -e "  ${GREEN}✓ 服务安装成功${NC}"
echo ""

# 启动服务
echo -e "${YELLOW}5. 启动服务...${NC}"
sleep 1
./pingToolAgent -service start >/dev/null 2>&1 || true
sleep 3

# 检查服务状态
if systemctl is-active --quiet $SERVICE_NAME; then
    echo -e "  ${GREEN}✓ 服务启动成功${NC}"
else
    echo -e "  ${YELLOW}⚠ 服务启动可能失败，请检查日志${NC}"
fi
echo ""

# 显示服务信息
echo -e "${CYAN}========================================"
echo -e "  安装完成！"
echo -e "========================================${NC}"
echo ""
echo -e "${CYAN}服务信息:${NC}"
echo -e "  名称: $SERVICE_NAME"
echo -e "  程序: $INSTALL_PATH/pingToolAgent"
echo -e "  路径: $INSTALL_PATH"
echo -e "  日志: $INSTALL_PATH/logs/guardian.log"
echo ""

# 显示日志
echo -e "${CYAN}查看实时日志 (按 Ctrl+C 退出):${NC}"
echo -e "  tail -f $INSTALL_PATH/logs/guardian.log"
echo ""

# 显示管理命令
echo -e "${CYAN}常用管理命令:${NC}"
echo -e "  查看服务状态: systemctl status $SERVICE_NAME"
echo -e "  停止服务: systemctl stop $SERVICE_NAME"
echo -e "  启动服务: systemctl start $SERVICE_NAME"
echo -e "  重启服务: systemctl restart $SERVICE_NAME"
echo -e "  查看日志: journalctl -u $SERVICE_NAME -f"
echo ""

# 询问是否查看日志
read -p "是否查看实时日志？(y/N): " -n 1 -r

if [[ $REPLY =~ ^[Yy]$ ]]; then
    tail -f "$INSTALL_PATH/logs/guardian.log"
fi
