#!/usr/bin/env bash
set -e

DEFAULT_PANEL_URL="http://xapi.reality.pp.ua"
CONFIG_FILE="/etc/xboard-node/config.yml"
SERVICE_NAME="xboard-node"

check_root() {
    if [ "$(id -u)" -ne 0 ]; then
        echo -e "\033[31m[错误] 请以 root 权限运行此脚本！\033[0m"
        exit 1
    fi
}

get_current_panel() {
    if [ -f "$CONFIG_FILE" ]; then
        grep -E '^[[:space:]]*api_url:' "$CONFIG_FILE" | awk '{print $2}' | tr -d '"' || echo "$DEFAULT_PANEL_URL"
    else
        echo "$DEFAULT_PANEL_URL"
    fi
}

get_status() {
    if systemctl is-active --quiet "$SERVICE_NAME"; then
        echo -e "\033[32m● 运行中\033[0m"
    else
        echo -e "\033[31m○ 未运行\033[0m"
    fi
}

install_machine() {
    echo -e "\033[32m========================================\033[0m"
    echo -e "\033[32m        开始部署 Xboard-Node Machine     \033[0m"
    echo -e "\033[32m========================================\033[0m"

    read -rp "请输入 Xboard 面板地址 [默认: ${DEFAULT_PANEL_URL}]: " INPUT_PANEL_URL
    PANEL_URL="${INPUT_PANEL_URL:-$DEFAULT_PANEL_URL}"
    PANEL_URL="${PANEL_URL%/}"
    echo -e "已选择面板地址: \033[33m${PANEL_URL}\033[0m\n"

    while true; do
        read -rp "请输入 Xboard 服务器 ID (Machine ID, 正整数): " MACHINE_ID
        if [[ "$MACHINE_ID" =~ ^[0-9]+$ ]]; then
            break
        else
            echo -e "\033[31m[错误] Machine ID 必须是正整数！\033[0m"
        fi
    done

    while true; do
        read -rp "请输入 Xboard 服务器管理 Token (Machine Token): " MACHINE_TOKEN
        [ -n "$MACHINE_TOKEN" ] && break
    done

    echo -e "\n\033[34m[1/4] 清理旧环境并停止服务...\033[0m"
    systemctl stop "$SERVICE_NAME" 2>/dev/null || true
    systemctl disable "$SERVICE_NAME" 2>/dev/null || true
    killall -9 "$SERVICE_NAME" 2>/dev/null || true
    rm -rf /etc/xboard-node /etc/systemd/system/xboard-node.service /usr/local/bin/xboard-node

    echo -e "\n\033[34m[2/4] 优化 DNS 解析通道...\033[0m"
    cat << 'RESOLV' > /etc/resolv.conf
nameserver 8.8.8.8
nameserver 1.1.1.1
RESOLV

    echo -e "\n\033[34m[3/4] 安装并注册 Machine 服务...\033[0m"
    curl -fsSL https://raw.githubusercontent.com/cedar2025/xboard-node/dev/install.sh | \
        bash -s -- --mode machine \
        --panel "${PANEL_URL}" \
        --machine-id "${MACHINE_ID}" \
        --token "${MACHINE_TOKEN}"

    echo -e "\n\033[34m[4/4] 优化日志输出配置...\033[0m"
    systemctl stop "$SERVICE_NAME" 2>/dev/null || true

    if [ -f "$CONFIG_FILE" ]; then
        if grep -q "log:" "$CONFIG_FILE"; then
            sed -i '/log:/,/level:/ s/level:.*/level: "warn"/' "$CONFIG_FILE"
        else
            cat << 'YAML' >> "$CONFIG_FILE"
log:
  level: "warn"
  timestamp: true
YAML
        fi
    fi

    systemctl daemon-reload
    systemctl restart "$SERVICE_NAME"

    echo -e "\n\033[32m[✓] 部署完成！后续可直接运行 xnode 打开菜单。\033[0m"
    read -rp "按回车键查看实时运行日志..."
    view_logs
}

start_node() {
    systemctl start "$SERVICE_NAME"
    echo -e "\033[32m[✓] $SERVICE_NAME 服务已启动。\033[0m"
}

stop_node() {
    systemctl stop "$SERVICE_NAME"
    echo -e "\033[33m[!] $SERVICE_NAME 服务已停止。\033[0m"
}

restart_node() {
    systemctl restart "$SERVICE_NAME"
    echo -e "\033[32m[✓] $SERVICE_NAME 服务已重启。\033[0m"
}

view_logs() {
    echo -e "\033[34m[提示] 正在查看实时日志，按 Ctrl + C 退出日志模式\033[0m"
    journalctl -u "$SERVICE_NAME" -f
}

uninstall_node() {
    read -rp "确定要完全卸载 xboard-node 吗？(y/N): " confirm
    if [[ "$confirm" =~ ^[yY]$ ]]; then
        systemctl stop "$SERVICE_NAME" 2>/dev/null || true
        systemctl disable "$SERVICE_NAME" 2>/dev/null || true
        killall -9 "$SERVICE_NAME" 2>/dev/null || true
        rm -rf /etc/xboard-node /etc/systemd/system/xboard-node.service /usr/local/bin/xboard-node /usr/local/bin/xnode
        systemctl daemon-reload
        echo -e "\033[32m[✓] xboard-node 及 xnode 管理脚本已完全卸载！\033[0m"
        exit 0
    else
        echo -e "\033[33m已取消卸载。\033[0m"
    fi
}

menu() {
    clear
    CURRENT_PANEL="$(get_current_panel)"
    echo -e "\033[36m========================================\033[0m"
    echo -e "\033[36m       Xboard-Node 管理工具 (xnode)     \033[0m"
    echo -e "\033[36m========================================\033[0m"
    echo -e " 服务状态: $(get_status)"
    echo -e " 当前面板: \033[33m${CURRENT_PANEL}\033[0m"
    echo -e "\033[36m----------------------------------------\033[0m"
    echo -e " \033[32m1.\033[0m 全新安装 / 重新部署 Machine 节点"
    echo -e " \033[32m2.\033[0m 启动服务"
    echo -e " \033[32m3.\033[0m 停止服务"
    echo -e " \033[32m4.\033[0m 重启服务"
    echo -e " \033[32m5.\033[0m 查看实时日志"
    echo -e " \033[32m6.\033[0m 卸载服务"
    echo -e " \033[32m0.\033[0m 退出"
    echo -e "\033[36m========================================\033[0m"
    read -rp "请输入选项编号 [0-6]: " choice

    case "$choice" in
        1) install_machine ;;
        2) start_node ;;
        3) stop_node ;;
        4) restart_node ;;
        5) view_logs ;;
        6) uninstall_node ;;
        0) exit 0 ;;
        *) echo -e "\033[31m[错误] 输入无效，请输入有效数字！\033[0m" ;;
    esac
}

check_root
menu