#!/bin/bash
# ==============================================================================
# Arthas MCP Server 离线启动脚本 (100% 离线内网环境专用)
# ==============================================================================
set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGE_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
ARTHAS_BIN_DIR="${PACKAGE_ROOT}/arthas-bin"
ARTHAS_VERSION="4.3.5"
LOCAL_LIB_DIR="${HOME}/.arthas/lib/${ARTHAS_VERSION}/arthas"

# 1. 确保离线运行库就位（无需外网下载）
if [[ ! -f "${LOCAL_LIB_DIR}/arthas-core.jar" ]]; then
    echo ">> [离线部署] 正在初始化本地 Arthas 离线缓存库至: ${LOCAL_LIB_DIR} ..."
    mkdir -p "${LOCAL_LIB_DIR}"
    cp "${ARTHAS_BIN_DIR}"/*.jar "${LOCAL_LIB_DIR}/" 2>/dev/null || true
    if [ -d "${ARTHAS_BIN_DIR}/async-profiler" ]; then
        cp -r "${ARTHAS_BIN_DIR}/async-profiler" "${LOCAL_LIB_DIR}/"
    fi
    echo ">> [离线部署] 本地离线库就绪！"
fi

# 2. 检查 Java 环境
if ! command -v java &>/dev/null; then
    echo "❌ 错误: 未检测到 java 命令，请确保已安装 JDK 8+ 并配置在 PATH 中。"
    exit 1
fi

# 3. 获取目标 PID
TARGET_PID="$1"
HTTP_PORT="${2:-8563}"
AUTH_PASSWORD="${3:-arthas123}"

if [[ -z "${TARGET_PID}" ]]; then
    echo "========================================================"
    echo "当前系统运行中的 Java 进程列表："
    echo "========================================================"
    if command -v jps &>/dev/null; then
        jps -l -v | grep -v "sun.tools.jps.Jps" || true
    else
        ps aux | grep java | grep -v grep || true
    fi
    echo "========================================================"
    read -rp "请输入要诊断的 Java 进程 PID: " TARGET_PID
fi

if [[ -z "${TARGET_PID}" ]]; then
    echo "❌ 错误: 目标 PID 不能为空。"
    exit 1
fi

# 检查进程是否存在
if ! kill -0 "${TARGET_PID}" 2>/dev/null; then
    echo "❌ 错误: 进程 PID ${TARGET_PID} 不存在或无权限访问。"
    exit 1
fi

echo ">> 准备 Attach 目标进程 PID: ${TARGET_PID} ..."
echo ">> MCP 端口: ${HTTP_PORT}"
echo ">> MCP 端点: /mcp"

# 4. 构建启动参数
BOOT_JAR="${ARTHAS_BIN_DIR}/arthas-boot.jar"
CMD_ARGS=("java" "-jar" "${BOOT_JAR}" "${TARGET_PID}" "--target-ip" "0.0.0.0" "--http-port" "${HTTP_PORT}" "--password" "${AUTH_PASSWORD}")

if [[ "$AUTH_PASSWORD" == "arthas123" && -z "$3" ]]; then
    echo ">> 鉴权模式: 使用默认密码 (arthas123)"
else
    echo ">> 安全模式: 已启用自定义鉴权密码"
fi

echo ">> 执行挂载: ${CMD_ARGS[*]}"
"${CMD_ARGS[@]}"

# 5. 服务验证
echo ""
echo ">> 正在验证 Arthas MCP 状态..."
sleep 2
if command -v curl &>/dev/null; then
    HEALTH_CODE=$(curl --noproxy "*" -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer ${AUTH_PASSWORD}" "http://localhost:${HTTP_PORT}/mcp" || echo "000")
    if [[ "${HEALTH_CODE}" != "000" && "${HEALTH_CODE}" != "404" ]]; then
        echo "✅ Arthas MCP 服务已成功启动！"
        echo "   MCP URL: http://localhost:${HTTP_PORT}/mcp"
        echo "   🔑 访问密码: ${AUTH_PASSWORD} (默认用户名: arthas)"
        echo "   访问认证头: Authorization: Bearer ${AUTH_PASSWORD}"
        if [[ "$AUTH_PASSWORD" == "arthas123" && -z "$3" ]]; then
            echo "   (未指定自定义密码，使用默认鉴权密码: arthas123)"
        fi
        echo ""
        echo "   [Agent 配置指引]"
        echo "   - MCP 服务端点: http://localhost:${HTTP_PORT}/mcp"
        echo "   - 客户端配置模板: config/universal_mcp.json"
    else
        echo "⚠️ 提示: HTTP 响应码为 ${HEALTH_CODE}，请检查进程日志。"
    fi
fi

