#!/usr/bin/env bash
# ==============================================================================
# Arthas MCP 通用离线安装与部署脚本
# 面向 AI Agent 通用生态（遵循标准 .agents 技能规范与 MCP 协议）
# ==============================================================================
set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PACKAGE_NAME="arthas-diagnosis"
ARTHAS_BIN_SRC="${SCRIPT_DIR}/arthas-bin"
ARTHAS_VERSION="4.3.5"
ARTHAS_CACHE_DIR="${HOME}/.arthas/lib/${ARTHAS_VERSION}/arthas"

echo "================================================================="
echo "   Arthas MCP 通用离线技能与排障套件安装程序 (AI Agent Universal)"
echo "   遵循标准 .agents 技能规范与 MCP 协议"
echo "================================================================="

# 1. 赋予执行权限
chmod +x "${SCRIPT_DIR}/bin"/*.sh 2>/dev/null || true
if [[ -f "${ARTHAS_BIN_SRC}/as.sh" ]]; then
    chmod +x "${ARTHAS_BIN_SRC}/as.sh" 2>/dev/null || true
fi

# 2. 预热本地 Arthas 离线运行库（100% 解除内网对外部网络的依赖）
echo ">> [1/4] 部署 Arthas 4.x 离线二进制环境..."
if mkdir -p "${ARTHAS_CACHE_DIR}" 2>/dev/null; then
    cp -f "${ARTHAS_BIN_SRC}"/*.jar "${ARTHAS_CACHE_DIR}/" 2>/dev/null || true
    cp -f "${ARTHAS_BIN_SRC}/arthas.properties" "${ARTHAS_CACHE_DIR}/" 2>/dev/null || true
    if [[ -d "${ARTHAS_BIN_SRC}/async-profiler" ]]; then
        cp -rf "${ARTHAS_BIN_SRC}/async-profiler" "${ARTHAS_CACHE_DIR}/" 2>/dev/null || true
    fi
    echo "   ✅ Arthas 离线运行库已就绪: ${ARTHAS_CACHE_DIR}"
else
    echo "   ℹ️ 提示: 无法写入 ${ARTHAS_CACHE_DIR}，将直接使用本地包内二进制运行时"
fi

# 3. 解析安装模式
TARGET_MODE="${1:-auto}"
WORKSPACE_DIR=""

if [[ "$TARGET_MODE" == "--workspace" ]]; then
    WORKSPACE_DIR="${2:-$(pwd)}"
fi

# 4. 部署通用 AI Agent 技能
echo ">> [2/4] 安装通用 AI Agent 技能定义..."

INSTALLED_AGENTS=0

# 通用规范：工作区与用户目录 (.agents/skills)
install_agent_skills() {
    local target_dir="${1}"
    local skill_path="${target_dir}/skills/${PACKAGE_NAME}"
    echo "   [Agent Skills] 部署通用技能至: ${skill_path} ..."
    if mkdir -p "${skill_path}" 2>/dev/null; then
        cp -rf "${SCRIPT_DIR}/skills/${PACKAGE_NAME}/"* "${skill_path}/" 2>/dev/null || true
        INSTALLED_AGENTS=$((INSTALLED_AGENTS + 1))
    else
        echo "   ⚠️ 跳过不可写路径: ${skill_path}"
    fi
}

case "$TARGET_MODE" in
    --workspace)
        install_agent_skills "${WORKSPACE_DIR}/.agents"
        ;;
    auto|*|--all)
        # 部署到当前工作区及用户标准技能目录
        install_agent_skills "$(pwd)/.agents"
        install_agent_skills "${HOME}/.agents"
        ;;
esac

echo "   ✅ 通用技能安装完成！"

echo ""
echo ">> [3/4] 离线启动与诊断脚本验证..."
echo "   - 启动脚本: ./bin/start-mcp.sh"
echo "   - 停止脚本: ./bin/stop-mcp.sh"
echo "   - 连通检测: ./bin/check-mcp.sh"

echo ""
echo ">> [4/4] 安装摘要与下一步指引..."
echo "================================================================="
echo "🎉 离线安装全部完成！"
echo ""
echo "▶ 步骤 1: 启动并挂载目标 Java 进程 (默认密码: arthas123)"
echo "   ./bin/start-mcp.sh <PID> 8563"
echo ""
echo "▶ 步骤 2: Agent 配置确认"
echo "   - 确保 Agent MCP 配置包含端点: http://localhost:8563/mcp"
echo "   - 通用配置模板参考: config/universal_mcp.json"
echo ""
echo "▶ 步骤 3: 自然语言排障"
echo "   在 AI Agent 对话中直接输入："
echo "   * '检查当前 JVM 状态与 CPU 最高的线程堆栈'"
echo "   * '追踪指定业务方法的耗时与入参信息'"
echo "================================================================="
