#!/bin/bash

# ================= 配置区域 =================
SCRIPT_URL="https://eocdn.foambk.top/tz/beta-go/install.sh"
BASE_URL="https://eocdn.foambk.top/tz/beta-go"
INSTALL_DIR="/opt/monitor"
SERVICE_NAME="monitor-client"
CLI_CMD="bktzc"
# ===========================================

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
SKYBLUE='\033[0;36m'
PLAIN='\033[0m'

# 检查 Root 权限
[[ $EUID -ne 0 ]] && echo -e "${RED}错误: 必须使用 root 用户运行此脚本！${PLAIN}" && exit 1

# ================= 检测架构 =================
detect_arch() {
    ARCH=$(uname -m)
    case "$ARCH" in
        x86_64|amd64)   BINARY_NAME="monitor-client-linux-amd64" ;;
        aarch64|arm64)   BINARY_NAME="monitor-client-linux-arm64" ;;
        armv7l|armhf)
            echo -e "${RED}❌ 不支持 32 位 ARM，请使用 64 位系统${PLAIN}"; exit 1 ;;
        *)
            echo -e "${RED}❌ 不支持的架构: $ARCH${PLAIN}"; exit 1 ;;
    esac
}

# ================= 检测 init 系统 =================
detect_init() {
    if [ -d /run/systemd/system ] && command -v systemctl &>/dev/null; then
        INIT_SYSTEM="systemd"
    elif command -v rc-service &>/dev/null && [ -d /etc/init.d ]; then
        INIT_SYSTEM="openrc"
    else
        INIT_SYSTEM="none"
    fi
}

# ================= 服务管理函数 =================
service_start() {
    case "$INIT_SYSTEM" in
        systemd)  systemctl start "$SERVICE_NAME" ;;
        openrc)   rc-service "$SERVICE_NAME" start ;;
        none)     cd "$INSTALL_DIR" && nohup "./${BINARY_NAME}" > /dev/null 2>&1 & ;;
    esac
}

service_stop() {
    case "$INIT_SYSTEM" in
        systemd)  systemctl stop "$SERVICE_NAME" ;;
        openrc)   rc-service "$SERVICE_NAME" stop ;;
        none)     pkill -f "${INSTALL_DIR}/${BINARY_NAME}" 2>/dev/null ;;
    esac
}

service_restart() {
    case "$INIT_SYSTEM" in
        systemd)  systemctl restart "$SERVICE_NAME" ;;
        openrc)   rc-service "$SERVICE_NAME" restart ;;
        none)
            pkill -f "${INSTALL_DIR}/${BINARY_NAME}" 2>/dev/null
            sleep 1
            cd "$INSTALL_DIR" && nohup "./${BINARY_NAME}" > /dev/null 2>&1 &
            ;;
    esac
}

service_is_active() {
    case "$INIT_SYSTEM" in
        systemd)  systemctl is-active --quiet "$SERVICE_NAME" 2>/dev/null ;;
        openrc)   rc-service "$SERVICE_NAME" status 2>/dev/null | grep -q "started" ;;
        none)     pgrep -f "${INSTALL_DIR}/${BINARY_NAME}" > /dev/null 2>&1 ;;
    esac
}

service_enable() {
    case "$INIT_SYSTEM" in
        systemd)  systemctl enable "$SERVICE_NAME" ;;
        openrc)   rc-update add "$SERVICE_NAME" default ;;
        none)     setup_rc_local ;;
    esac
}

setup_rc_local() {
    if [ -f /etc/rc.local ]; then
        if ! grep -q "${INSTALL_DIR}/${BINARY_NAME}" /etc/rc.local; then
            sed -i "/^exit 0/i cd ${INSTALL_DIR} && nohup ./${BINARY_NAME} > /dev/null 2>&1 &" /etc/rc.local
        fi
    fi
}

# ================= 创建服务文件 =================
create_service() {
    case "$INIT_SYSTEM" in
        systemd)
            cat > /etc/systemd/system/${SERVICE_NAME}.service <<EOF
[Unit]
Description=Monitor Client
After=network.target

[Service]
Type=simple
ExecStart=${INSTALL_DIR}/${BINARY_NAME}
WorkingDirectory=${INSTALL_DIR}
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
            systemctl daemon-reload
            ;;
        openrc)
            cat > /etc/init.d/${SERVICE_NAME} <<EOF
#!/sbin/openrc-run

name="${SERVICE_NAME}"
description="Monitor Client"
command="${INSTALL_DIR}/${BINARY_NAME}"
command_background=true
pidfile="/run/${SERVICE_NAME}.pid"
directory="${INSTALL_DIR}"

depend() {
    need net
    after firewall
}
EOF
            chmod +x /etc/init.d/${SERVICE_NAME}
            ;;
        none)
            ;;
    esac
}

# ================= 删除服务文件 =================
remove_service() {
    case "$INIT_SYSTEM" in
        systemd)
            systemctl stop "$SERVICE_NAME" >/dev/null 2>&1
            systemctl disable "$SERVICE_NAME" >/dev/null 2>&1
            rm -f /etc/systemd/system/${SERVICE_NAME}.service
            systemctl daemon-reload
            ;;
        openrc)
            rc-service "$SERVICE_NAME" stop >/dev/null 2>&1
            rc-update del "$SERVICE_NAME" default >/dev/null 2>&1
            rm -f /etc/init.d/${SERVICE_NAME}
            ;;
        none)
            pkill -f "${INSTALL_DIR}/${BINARY_NAME}" 2>/dev/null
            if [ -f /etc/rc.local ]; then
                sed -i '/monitor-client/d' /etc/rc.local
                sed -i '/Monitor Client/d' /etc/rc.local
            fi
            ;;
    esac
}

# ================= 停止旧版 Python 服务 =================
# 【新增】用于迁移时停止 Python 版
stop_python_service() {
    case "$INIT_SYSTEM" in
        systemd)
            systemctl stop "$SERVICE_NAME" >/dev/null 2>&1
            systemctl disable "$SERVICE_NAME" >/dev/null 2>&1
            rm -f /etc/systemd/system/${SERVICE_NAME}.service
            systemctl daemon-reload
            ;;
        openrc)
            rc-service "$SERVICE_NAME" stop >/dev/null 2>&1
            rc-update del "$SERVICE_NAME" default >/dev/null 2>&1
            rm -f /etc/init.d/${SERVICE_NAME}
            ;;
        none)
            pkill -f "python3.*client.py" 2>/dev/null
            pkill -f "python.*client.py" 2>/dev/null
            if [ -f /etc/rc.local ]; then
                sed -i '/client.py/d' /etc/rc.local
            fi
            ;;
    esac
}

# ================= 隐藏的自动升级逻辑 =================
if [ "$1" == "--continue-update" ]; then
    detect_arch
    detect_init
    echo -e "\n${YELLOW}=== 正在升级客户端 ===${PLAIN}"

    OLD_CFG=""
    if [ -f "${INSTALL_DIR}/config.json" ]; then
        OLD_CFG=$(cat "${INSTALL_DIR}/config.json")
    fi

    echo -e "${SKYBLUE}正在下载 $BINARY_NAME ...${PLAIN}"
    curl -k -sL -o "/tmp/${BINARY_NAME}" "${BASE_URL}/${BINARY_NAME}"

    if [ ! -f "/tmp/${BINARY_NAME}" ] || [ "$(stat -c%s "/tmp/${BINARY_NAME}" 2>/dev/null)" -lt 1000000 ]; then
        echo -e "${RED}❌ 下载失败${PLAIN}"
        exit 1
    fi

    service_stop
    mv -f "/tmp/${BINARY_NAME}" "${INSTALL_DIR}/${BINARY_NAME}"
    chmod +x "${INSTALL_DIR}/${BINARY_NAME}"

    if [ -n "$OLD_CFG" ]; then
        echo "$OLD_CFG" > "${INSTALL_DIR}/config.json"
        echo -e "${GREEN}✅ 配置已保留${PLAIN}"
    fi

    create_service
    service_start
    echo -e "\n${GREEN}✅ 客户端已完成升级！${PLAIN}"
    exit 0
fi

# ================= 函数：安装客户端 =================
install_monitor() {
    detect_arch
    detect_init

    echo -e "${SKYBLUE}检测到架构: $ARCH | init 系统: $INIT_SYSTEM${PLAIN}"

    # 1. 冲突检测
    if [ -f "${INSTALL_DIR}/${BINARY_NAME}" ]; then
        echo -e "\n${RED}⚠️  系统已安装过客户端！${PLAIN}"
        echo -e "${YELLOW}重新安装将覆盖配置，建议使用 [2. 更新客户端]${PLAIN}"
        read -p "确定要继续重新安装吗？[y/N]: " re_confirm
        [[ "$re_confirm" != "y" && "$re_confirm" != "Y" ]] && return
        service_stop
    fi

    # 2. 配置输入
    echo -e "\n${YELLOW}=== 配置上报信息 ===${PLAIN}"
    read -p "请输入服务端域名 (例如 monitor.abc.com): " S_IP
    read -p "请输入服务端生成的 Token: " S_TOKEN
    [[ -z "$S_IP" || -z "$S_TOKEN" ]] && { echo -e "${RED}输入不能为空！${PLAIN}"; return; }

    # 3. 下载二进制
    mkdir -p "${INSTALL_DIR}"
    echo -e "\n${YELLOW}=== 下载客户端 ===${PLAIN}"
    echo -e "${SKYBLUE}正在下载 $BINARY_NAME ...${PLAIN}"

    curl -k -sL -o "${INSTALL_DIR}/${BINARY_NAME}" "${BASE_URL}/${BINARY_NAME}"

    if [ ! -f "${INSTALL_DIR}/${BINARY_NAME}" ] || [ "$(stat -c%s "${INSTALL_DIR}/${BINARY_NAME}" 2>/dev/null)" -lt 1000000 ]; then
        echo -e "${RED}❌ 下载失败，请检查网络${PLAIN}"
        return
    fi

    chmod +x "${INSTALL_DIR}/${BINARY_NAME}"
    echo -e "${GREEN}✅ 下载完成${PLAIN}"

    # 4. 写入配置
    cat > "${INSTALL_DIR}/config.json" << EOF
{
    "server_ip": "${S_IP}",
    "server_token": "${S_TOKEN}"
}
EOF
    echo -e "${GREEN}✅ 配置已写入${PLAIN}"

    # 5. 创建服务 + 启动
    create_service

    cp -f "$0" "/usr/local/bin/${CLI_CMD}"
    chmod +x "/usr/local/bin/${CLI_CMD}"

    service_enable
    service_start

    sleep 2
    if service_is_active; then
        echo -e "\n${GREEN}✅ 客户端安装成功并已启动！${PLAIN}"
        echo -e "架构: ${SKYBLUE}${ARCH}${PLAIN}"
        echo -e "init: ${SKYBLUE}${INIT_SYSTEM}${PLAIN}"
        echo -e "域名: ${SKYBLUE}${S_IP}${PLAIN}"
        echo -e "管理命令: ${GREEN}${CLI_CMD}${PLAIN}"
    else
        echo -e "\n${RED}❌ 启动失败！${PLAIN}"
        case "$INIT_SYSTEM" in
            systemd) echo -e "  查看日志: ${YELLOW}journalctl -u ${SERVICE_NAME} -n 20${PLAIN}" ;;
            openrc)  echo -e "  查看日志: ${YELLOW}cat /var/log/messages | tail -20${PLAIN}" ;;
            none)    echo -e "  手动运行: ${YELLOW}cd ${INSTALL_DIR} && ./${BINARY_NAME}${PLAIN}" ;;
        esac
    fi
    read -p "按回车键继续..."
}

# ================= 功能：更新 =================
upgrade_flow() {
    if [ ! -f "${INSTALL_DIR}/monitor-client-linux-amd64" ] && [ ! -f "${INSTALL_DIR}/monitor-client-linux-arm64" ]; then
        echo -e "${RED}未检测到安装！${PLAIN}"; read -p "回车返回..."; return
    fi

    echo -e "\n${YELLOW}=== 1. 正在更新管理脚本 ===${PLAIN}"
    curl -s -k -L "$SCRIPT_URL" -o /tmp/install_new.sh
    if [ $? -eq 0 ] && [ -s /tmp/install_new.sh ]; then
        mv -f /tmp/install_new.sh "/usr/local/bin/${CLI_CMD}"
        chmod +x "/usr/local/bin/${CLI_CMD}"
        echo -e "${GREEN}脚本更新完成！正在更新客户端...${PLAIN}"
        exec "/usr/local/bin/${CLI_CMD}" --continue-update
    else
        echo -e "${RED}更新脚本失败${PLAIN}"
        read -p "按回车继续..."
    fi
}

# ================= 功能：从 Python 版迁移 =================
# 【新增】
migrate_from_python() {
    detect_arch
    detect_init

    PYTHON_CLIENT="/opt/monitor/client.py"

    echo -e "\n${YELLOW}=== 从 Python 版迁移到 Go 版 ===${PLAIN}"

    # 1. 检测旧版
    if [ ! -f "$PYTHON_CLIENT" ]; then
        echo -e "${RED}未检测到 Python 版客户端 ($PYTHON_CLIENT)${PLAIN}"
        read -p "按回车返回..."; return
    fi

    echo -e "${GREEN}✅ 检测到 Python 版客户端${PLAIN}"

    # 2. 提取旧配置
    OLD_IP=$(grep "^SERVER_IP" "$PYTHON_CLIENT" | awk -F"['\"]" '{print $2}')
    OLD_TOKEN=$(grep "^SERVER_TOKEN" "$PYTHON_CLIENT" | awk -F"['\"]" '{print $2}')

    if [ -z "$OLD_IP" ] || [ -z "$OLD_TOKEN" ]; then
        echo -e "${RED}❌ 无法提取旧配置，请手动输入${PLAIN}"
        read -p "请输入域名: " OLD_IP
        read -p "请输入 Token: " OLD_TOKEN
        [[ -z "$OLD_IP" || -z "$OLD_TOKEN" ]] && { echo -e "${RED}输入不能为空！${PLAIN}"; return; }
    fi

    echo -e "${SKYBLUE}域名:${PLAIN} $OLD_IP"
    echo -e "${SKYBLUE}Token:${PLAIN} ${OLD_TOKEN:0:8}****"

    # 3. 确认
    echo ""
    echo -e "${YELLOW}迁移操作:${PLAIN}"
    echo -e "  1. 停止旧 Python 客户端"
    echo -e "  2. 下载新 Go 客户端 ($BINARY_NAME)"
    echo -e "  3. 保留设备 ID (服务端不会出现重复设备)"
    echo -e "  4. 删除旧 Python 文件"
    echo -e "  5. 注册新服务并启动"
    echo ""
    read -p "确认开始迁移？[y/N]: " confirm
    [[ "$confirm" != "y" && "$confirm" != "Y" ]] && return

    # 4. 备份设备 ID
    ID_FILE="/opt/monitor/client_id.json"
    if [ -f "$ID_FILE" ]; then
        cp "$ID_FILE" "/tmp/client_id_backup.json"
        echo -e "${GREEN}✅ 设备 ID 已备份${PLAIN}"
    fi

    # 5. 停止旧服务
    echo -e "${SKYBLUE}停止旧服务...${PLAIN}"
    stop_python_service
    sleep 1

    # 6. 清理旧 Python 文件
    echo -e "${SKYBLUE}清理旧文件...${PLAIN}"
    rm -f /opt/monitor/client.py
    rm -f /opt/monitor/client.log
    rm -f /opt/monitor/requirements_Linux.txt
    find /opt/monitor -name "*.pyc" -delete 2>/dev/null
    find /opt/monitor -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null
    # 保留 client_id.json

    # 7. 下载新 Go 客户端
    echo -e "${SKYBLUE}下载 $BINARY_NAME ...${PLAIN}"
    curl -k -sL -o "${INSTALL_DIR}/${BINARY_NAME}" "${BASE_URL}/${BINARY_NAME}"

    if [ ! -f "${INSTALL_DIR}/${BINARY_NAME}" ] || [ "$(stat -c%s "${INSTALL_DIR}/${BINARY_NAME}" 2>/dev/null)" -lt 1000000 ]; then
        echo -e "${RED}❌ 下载失败！${PLAIN}"
        [ -f "/tmp/client_id_backup.json" ] && cp "/tmp/client_id_backup.json" "$ID_FILE"
        read -p "按回车返回..."; return
    fi

    chmod +x "${INSTALL_DIR}/${BINARY_NAME}"
    echo -e "${GREEN}✅ 下载完成${PLAIN}"

    # 8. 恢复设备 ID
    if [ -f "/tmp/client_id_backup.json" ]; then
        cp "/tmp/client_id_backup.json" "$ID_FILE"
        rm -f "/tmp/client_id_backup.json"
        echo -e "${GREEN}✅ 设备 ID 已恢复${PLAIN}"
    fi

    # 9. 写入新配置
    cat > "${INSTALL_DIR}/config.json" << EOF
{
    "server_ip": "${OLD_IP}",
    "server_token": "${OLD_TOKEN}"
}
EOF
    echo -e "${GREEN}✅ 配置已迁移${PLAIN}"

    # 10. 注册新服务 + 启动
    create_service
    cp -f "$0" "/usr/local/bin/${CLI_CMD}"
    chmod +x "/usr/local/bin/${CLI_CMD}"
    service_enable
    service_start

    sleep 2
    if service_is_active; then
        echo -e "\n${GREEN}✅ 迁移完成！Go 版客户端已启动！${PLAIN}"
        echo -e "域名: ${SKYBLUE}${OLD_IP}${PLAIN}"
        echo -e "架构: ${SKYBLUE}${ARCH}${PLAIN}"
        echo -e "init: ${SKYBLUE}${INIT_SYSTEM}${PLAIN}"
        echo ""
        echo -e "${YELLOW}已移除:${PLAIN} Python 客户端 + psutil 依赖"
        echo -e "${YELLOW}已保留:${PLAIN} 设备 ID + 域名/Token"
        echo -e "${YELLOW}新增:${PLAIN} 管理命令 ${GREEN}${CLI_CMD}${PLAIN}"
    else
        echo -e "\n${RED}❌ 启动失败！${PLAIN}"
        case "$INIT_SYSTEM" in
            systemd) echo -e "  查看日志: ${YELLOW}journalctl -u ${SERVICE_NAME} -n 20${PLAIN}" ;;
            openrc)  echo -e "  查看日志: ${YELLOW}cat /var/log/messages | tail -20${PLAIN}" ;;
            none)    echo -e "  手动运行: ${YELLOW}cd ${INSTALL_DIR} && ./${BINARY_NAME}${PLAIN}" ;;
        esac
    fi
    read -p "按回车键继续..."
}

# ================= 功能：修改配置 =================
edit_config() {
    if [ ! -f "${INSTALL_DIR}/config.json" ]; then
        echo -e "${RED}未检测到配置文件！${PLAIN}"; read -p "回车返回..."; return
    fi

    echo -e "\n${YELLOW}=== 当前配置 ===${PLAIN}"
    cat "${INSTALL_DIR}/config.json"
    echo ""

    echo -e "\n${YELLOW}=== 修改配置 ===${PLAIN}"
    read -p "请输入新域名 (留空不修改): " NEW_IP
    read -p "请输入新 Token (留空不修改): " NEW_TOKEN

    if [ -z "$NEW_IP" ] && [ -z "$NEW_TOKEN" ]; then
        echo -e "${YELLOW}未做任何修改${PLAIN}"
        read -p "按回车返回..."; return
    fi

    CUR_IP=$(grep -o '"server_ip"[[:space:]]*:[[:space:]]*"[^"]*"' "${INSTALL_DIR}/config.json" | awk -F'"' '{print $4}')
    CUR_TOKEN=$(grep -o '"server_token"[[:space:]]*:[[:space:]]*"[^"]*"' "${INSTALL_DIR}/config.json" | awk -F'"' '{print $4}')

    [ -z "$NEW_IP" ] && NEW_IP="$CUR_IP"
    [ -z "$NEW_TOKEN" ] && NEW_TOKEN="$CUR_TOKEN"

    cat > "${INSTALL_DIR}/config.json" << EOF
{
    "server_ip": "${NEW_IP}",
    "server_token": "${NEW_TOKEN}"
}
EOF

    detect_init
    service_restart
    echo -e "\n${GREEN}✅ 配置已更新并重启！${PLAIN}"
    echo -e "域名: ${SKYBLUE}${NEW_IP}${PLAIN}"
    read -p "按回车返回..."
}

# ================= 功能：卸载 =================
uninstall_monitor() {
    echo -e "\n${RED}警告：将完全移除监控程序和快捷命令！${PLAIN}"
    read -p "确认卸载吗？[y/N]: " confirm_un
    [[ "$confirm_un" != "y" && "$confirm_un" != "Y" ]] && return

    detect_init
    remove_service
    rm -f "/usr/local/bin/${CLI_CMD}"

    read -p "是否保留设备 ID (避免服务端重复设备)? [y/N]: " KEEP_ID
    if [[ "$KEEP_ID" == "y" || "$KEEP_ID" == "Y" ]]; then
        find "${INSTALL_DIR}" -type f ! -name 'client_id.json' -delete 2>/dev/null
        echo -e "${GREEN}程序已卸载，设备 ID 已保留。${PLAIN}"
    else
        rm -rf "${INSTALL_DIR}"
        echo -e "${GREEN}已彻底移除所有文件。${PLAIN}"
    fi
    read -p "按回车返回..."
}

# ================= 功能：查看信息 =================
show_info() {
    echo -e "\n${YELLOW}=== 客户端信息 ===${PLAIN}"

    detect_init
    echo -e "${SKYBLUE}架构:${PLAIN} $(uname -m)"
    echo -e "${SKYBLUE}init:${PLAIN} $INIT_SYSTEM"
    echo ""

    if [ -f "${INSTALL_DIR}/config.json" ]; then
        echo -e "${SKYBLUE}配置:${PLAIN}"
        cat "${INSTALL_DIR}/config.json"
        echo ""
    fi

    if [ -f "${INSTALL_DIR}/client_id.json" ]; then
        echo -e "${SKYBLUE}设备ID:${PLAIN}"
        cat "${INSTALL_DIR}/client_id.json"
        echo ""
    fi

    if [ -f "${INSTALL_DIR}/client.log" ]; then
        echo -e "${SKYBLUE}最近日志:${PLAIN}"
        tail -5 "${INSTALL_DIR}/client.log"
    fi

    echo ""
    read -p "按回车返回..."
}

# ================= 主菜单 =================
show_menu() {
    while true; do
        clear
        detect_init

        echo -e "${GREEN}################################################${PLAIN}"
        echo -e "${GREEN}#          监控客户端管理 (Go 版)               #${PLAIN}"
        echo -e "${GREEN}################################################${PLAIN}"
        echo -e " ${SKYBLUE}架构:${PLAIN} $(uname -m) | ${SKYBLUE}init:${PLAIN} $INIT_SYSTEM"
        echo ""

        # 【修改】状态检测：兼容 Go 版和 Python 版
        if service_is_active; then
            echo -e " ${YELLOW}服务状态:${PLAIN} ${GREEN}▶ 运行中${PLAIN}"
        elif [ -f "${INSTALL_DIR}/monitor-client-linux-amd64" ] || [ -f "${INSTALL_DIR}/monitor-client-linux-arm64" ] || [ -f "${INSTALL_DIR}/client.py" ]; then
            echo -e " ${YELLOW}服务状态:${PLAIN} ${RED}■ 已停止${PLAIN}"
        else
            echo -e " ${YELLOW}服务状态:${PLAIN} ${SKYBLUE}未安装${PLAIN}"
        fi

        echo ""
        echo -e " ${GREEN}1.${PLAIN} 安装客户端 (Go 版)"
        echo -e " ${GREEN}2.${PLAIN} 更新客户端"
        echo -e " ${GREEN}3.${PLAIN} 启动客户端"
        echo -e " ${GREEN}4.${PLAIN} 停止客户端"
        echo -e " ${GREEN}5.${PLAIN} 重启客户端"
        echo -e " ${GREEN}6.${PLAIN} 查看实时日志"
        echo -e " ${GREEN}7.${PLAIN} 修改配置 (域名/Token)"
        echo -e " ${GREEN}8.${PLAIN} 查看客户端信息"
        echo -e " ${GREEN}9.${PLAIN} 彻底卸载客户端"
        echo -e " ${GREEN}10.${PLAIN} ${YELLOW}从 Python 版迁移到 Go 版${PLAIN}"
        echo -e " ${GREEN}0.${PLAIN} 退出控制台"
        echo ""
        read -p " 请输入指令 [0-10]: " num

        case "$num" in
            1) install_monitor ;;
            2) upgrade_flow ;;
            3) service_start && echo -e "${GREEN}启动完成${PLAIN}"; sleep 1 ;;
            4) service_stop && echo -e "${YELLOW}停止完成${PLAIN}"; sleep 1 ;;
            5) service_restart && echo -e "${GREEN}重启完成${PLAIN}"; sleep 1 ;;
            6)
                echo -e "${SKYBLUE}提示: 按 Ctrl+C 退出${PLAIN}"
                if [ "$INIT_SYSTEM" = "systemd" ]; then
                    journalctl -u ${SERVICE_NAME} -f
                elif [ -f "${INSTALL_DIR}/client.log" ]; then
                    tail -f "${INSTALL_DIR}/client.log"
                else
                    echo -e "${RED}无日志可查看${PLAIN}"; sleep 2
                fi ;;
            7) edit_config ;;
            8) show_info ;;
            9) uninstall_monitor ;;
            10) migrate_from_python ;;
            0) exit 0 ;;
            *) echo -e "${RED}指令错误！${PLAIN}" ; sleep 1 ;;
        esac
    done
}

trap "echo -e '\n已退出'; exit 0" SIGINT
show_menu
