#!/bin/bash

# 🏢 Enterprise MCP服务启动脚本
# 基于官方MCP服务器和高价值第三方服务的企业级部署

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m'

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_highlight() { echo -e "${PURPLE}[HIGHLIGHT]${NC} $1"; }

# 显示企业级MCP服务介绍
show_enterprise_intro() {
    echo ""
    log_highlight "🏢 Enterprise MCP服务 - 企业级AI工作流解决方案"
    echo ""
    echo "📦 包含8个强大的企业级MCP服务："
    echo ""
    echo "🏆 官方MCP服务器 (modelcontextprotocol/servers - 56.5k ⭐):"
    echo "  • Memory MCP - 知识图谱记忆系统"
    echo "  • Filesystem MCP - 安全文件操作"
    echo "  • Git MCP - 版本控制集成"
    echo "  • Fetch MCP - 网页内容获取"
    echo "  • Time MCP - 时间处理工具"
    echo "  • Sequential Thinking MCP - 结构化推理"
    echo ""
    echo "🥇 高价值第三方服务:"
    echo "  • Claude Task Master (16.9k ⭐) - AI任务管理系统"
    echo "  • Context7 MCP (15.7k ⭐) - 最新代码文档"
    echo "  • MCP Atlassian (2.2k ⭐) - Confluence & Jira集成"
    echo "  • Exa MCP Server (1.8k ⭐) - AI搜索引擎"
    echo "  • Enterprise Dashboard - 统一监控面板"
    echo ""
    echo "💼 企业级特性:"
    echo "  • 完整的项目管理工作流"
    echo "  • 知识管理和文档协作"
    echo "  • 版本控制和代码管理"
    echo "  • 智能内容获取和分析"
    echo "  • 结构化思维和推理"
    echo ""
}

# 检查企业级系统要求
check_enterprise_requirements() {
    log_info "检查Enterprise MCP系统要求..."
    
    # 检查Docker
    if ! command -v docker &> /dev/null; then
        log_error "Docker 未安装，Enterprise MCP服务需要Docker支持"
        exit 1
    fi
    
    # 检查Docker Compose
    if ! command -v docker-compose &> /dev/null; then
        log_error "Docker Compose 未安装"
        exit 1
    fi
    
    # 检查可用端口
    local ports=(8080 9001 9002 9003 9004 9005 9006 9007)
    for port in "${ports[@]}"; do
        if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then
            log_warning "端口 $port 已被占用，可能影响服务启动"
        fi
    done
    
    log_success "系统要求检查完成"
}

# 检查企业级API密钥配置
check_enterprise_api_keys() {
    log_info "检查Enterprise MCP API密钥配置..."
    
    echo ""
    echo -e "${CYAN}📋 Enterprise MCP API密钥状态:${NC}"
    
    # Atlassian配置检查
    echo -e "${YELLOW}🏢 Atlassian集成:${NC}"
    if grep -q "^CONFLUENCE_URL=.*[^_here]$" .env 2>/dev/null && \
       grep -q "^CONFLUENCE_API_TOKEN=.*[^_token]$" .env 2>/dev/null; then
        echo "  ✅ Confluence - 已配置"
    else
        echo "  ❌ Confluence - 未配置 (企业知识管理)"
    fi

    if grep -q "^JIRA_URL=.*[^_here]$" .env 2>/dev/null && \
       grep -q "^JIRA_API_TOKEN=.*[^_token]$" .env 2>/dev/null; then
        echo "  ✅ Jira - 已配置"
    else
        echo "  ❌ Jira - 未配置 (项目管理)"
    fi

    # Exa AI搜索配置检查
    echo -e "${YELLOW}🔍 Exa AI搜索:${NC}"
    if grep -q "^EXA_API_KEY=.*[^_here]$" .env 2>/dev/null; then
        echo "  ✅ Exa API Key - 已配置"
    else
        echo "  ❌ Exa API Key - 未配置 (AI搜索引擎)"
    fi
    
    # 官方服务状态
    echo ""
    echo -e "${GREEN}✅ 无需API密钥的官方服务:${NC}"
    echo "  • Memory MCP - 知识图谱记忆"
    echo "  • Filesystem MCP - 文件系统操作"
    echo "  • Git MCP - 版本控制"
    echo "  • Fetch MCP - 网页内容获取"
    echo "  • Time MCP - 时间处理"
    echo "  • Sequential Thinking MCP - 结构化推理"
    echo "  • Context7 MCP - 最新代码文档 (无需API密钥)"
    echo "  • Claude Task Master - AI任务管理系统 (需要AI API密钥)"

    echo ""
    echo -e "${YELLOW}⚠️  需要API密钥的第三方服务:${NC}"
    echo "  • Claude Task Master - 需要AI API Keys (Claude/GPT/Gemini等)"
    echo "  • MCP Atlassian - 需要Atlassian API Token"
    echo "  • Exa MCP Server - 需要Exa API Key"

    echo ""
    echo -e "${BLUE}💡 配置说明:${NC}"
    echo "  • AI服务需要API密钥 (Claude: https://console.anthropic.com/, OpenAI: https://platform.openai.com/)"
    echo "  • Atlassian服务需要API Token (获取地址: https://id.atlassian.com/manage-profile/security/api-tokens)"
    echo "  • 官方MCP服务可直接使用，无需额外配置"
    echo "  • 编辑 .env 文件配置所有API密钥"
}

# 创建企业级数据目录
setup_enterprise_directories() {
    log_info "创建Enterprise MCP数据目录..."
    
    mkdir -p mcp-data/{memory,filesystem,git,atlassian,thinking}
    
    # 创建企业级README文件
    cat > mcp-data/memory/README.md << 'EOF'
# Memory MCP 数据目录

官方Memory MCP服务的数据存储目录。

## 功能特性
- 🧠 知识图谱记忆系统
- 📚 持久化知识存储
- 🔍 智能知识检索
- 🔗 关联关系管理

## 访问地址
- MCP服务: http://localhost:9001

## 使用说明
1. 通过MCP协议存储和检索知识
2. 支持复杂的知识图谱关系
3. 提供持久化存储能力
EOF
    
    cat > mcp-data/atlassian/README.md << 'EOF'
# Atlassian MCP 数据目录

MCP Atlassian服务的数据存储目录。

## 功能特性
- 📝 Confluence知识管理
- 🎯 Jira项目管理
- 🔍 智能搜索和分析
- 📊 企业级协作工具

## 访问地址
- MCP服务: http://localhost:9006

## 支持的操作
- confluence_search: 搜索Confluence内容
- confluence_get_page: 获取页面内容
- jira_search: 搜索Jira问题
- jira_get_issue: 获取问题详情
- jira_create_issue: 创建新问题
EOF
    
    log_success "企业级数据目录创建完成"
}

# 启动Enterprise MCP服务
start_enterprise_services() {
    show_enterprise_intro
    check_enterprise_requirements
    check_enterprise_api_keys
    
    # 检查环境变量文件
    if [ ! -f ".env" ]; then
        log_error "环境变量文件 .env 不存在"
        exit 1
    fi
    
    setup_enterprise_directories
    
    log_info "启动Enterprise MCP服务集群..."
    
    # 拉取镜像
    log_info "拉取Docker镜像..."
    docker-compose -f docker-compose.enterprise.yml pull
    
    # 启动服务
    log_info "启动企业级服务容器..."
    docker-compose -f docker-compose.enterprise.yml up -d
    
    # 等待服务启动
    log_info "等待服务启动 (45秒)..."
    sleep 45
    
    # 检查服务状态
    show_enterprise_status
}

# 显示企业级服务状态
show_enterprise_status() {
    log_info "Enterprise MCP服务状态："
    echo ""
    
    docker-compose -f docker-compose.enterprise.yml ps
    
    echo ""
    log_info "服务健康检查："
    
    # 检查各个服务
    services=(
        "mcp-memory-official:Memory MCP (官方)"
        "mcp-filesystem-official:Filesystem MCP (官方)"
        "mcp-git-official:Git MCP (官方)"
        "mcp-fetch-official:Fetch MCP (官方)"
        "mcp-time-official:Time MCP (官方)"
        "mcp-sequential-thinking:Sequential Thinking MCP (官方)"
        "mcp-atlassian-enterprise:Atlassian MCP (2.2k⭐)"
        "mcp-enterprise-dashboard:Enterprise Dashboard"
    )
    
    for service_info in "${services[@]}"; do
        IFS=':' read -r service_name service_desc <<< "$service_info"
        if docker ps | grep -q "$service_name"; then
            echo "  ✅ $service_desc"
        else
            echo "  ❌ $service_desc (未运行)"
        fi
    done
    
    echo ""
    log_success "Enterprise MCP服务集群启动完成！"
    
    # 显示访问信息
    show_enterprise_access_info
}

# 显示企业级访问信息
show_enterprise_access_info() {
    echo ""
    log_highlight "=== 🌐 Enterprise MCP访问地址 ==="
    echo ""
    echo "🏆 官方MCP服务器 (modelcontextprotocol/servers - 56.5k⭐):"
    echo "  • Memory MCP: http://localhost:9001"
    echo "  • Filesystem MCP: http://localhost:9002"
    echo "  • Git MCP: http://localhost:9003"
    echo "  • Fetch MCP: http://localhost:9004"
    echo "  • Time MCP: http://localhost:9005"
    echo "  • Sequential Thinking MCP: http://localhost:9007"
    echo ""
    echo "🥇 高价值第三方服务:"
    echo "  • Atlassian MCP (2.2k⭐): http://localhost:9006"
    echo ""
    echo "📊 企业级监控:"
    echo "  • Enterprise Dashboard: http://localhost:8080"
    echo ""
    echo "🔧 管理命令:"
    echo "  • 查看状态: docker-compose -f docker-compose.enterprise.yml ps"
    echo "  • 查看日志: docker-compose -f docker-compose.enterprise.yml logs"
    echo "  • 停止服务: docker-compose -f docker-compose.enterprise.yml down"
    echo "  • 重启服务: docker-compose -f docker-compose.enterprise.yml restart"
    echo ""
    log_highlight "🎉 现在你拥有了完整的企业级MCP服务生态系统！"
    echo ""
    echo "💼 企业级应用场景:"
    echo "  • 📝 知识管理 - Confluence集成，智能文档搜索"
    echo "  • 🎯 项目管理 - Jira集成，任务跟踪和管理"
    echo "  • 🧠 智能记忆 - Memory MCP，持久化知识图谱"
    echo "  • 📁 文件管理 - Filesystem MCP，安全文件操作"
    echo "  • 🔄 版本控制 - Git MCP，代码仓库管理"
    echo "  • 🌐 内容获取 - Fetch MCP，智能网页抓取"
    echo "  • ⏰ 时间处理 - Time MCP，时区和时间转换"
    echo "  • 🤔 结构化思考 - Sequential Thinking MCP，推理链"
}

# 停止企业级服务
stop_enterprise_services() {
    log_info "停止Enterprise MCP服务..."
    docker-compose -f docker-compose.enterprise.yml down
    log_success "企业级服务已停止"
}

# 重启企业级服务
restart_enterprise_services() {
    log_info "重启Enterprise MCP服务..."
    stop_enterprise_services
    sleep 3
    start_enterprise_services
}

# 显示帮助
show_help() {
    echo "Enterprise MCP服务管理脚本"
    echo ""
    echo "用法: $0 [命令]"
    echo ""
    echo "命令:"
    echo "  start     启动Enterprise MCP服务 (默认)"
    echo "  stop      停止Enterprise MCP服务"
    echo "  restart   重启Enterprise MCP服务"
    echo "  status    显示服务状态"
    echo "  logs      显示服务日志"
    echo "  keys      检查API密钥配置"
    echo "  help      显示帮助信息"
    echo ""
    echo "示例:"
    echo "  $0 start                    # 启动所有Enterprise服务"
    echo "  $0 keys                     # 检查API密钥配置"
    echo "  $0 status                   # 查看服务状态"
}

# 主函数
main() {
    case "${1:-start}" in
        start)
            start_enterprise_services
            ;;
        stop)
            stop_enterprise_services
            ;;
        restart)
            restart_enterprise_services
            ;;
        status)
            if [ -f "docker-compose.enterprise.yml" ]; then
                show_enterprise_status
            else
                log_error "服务未启动，请先运行: $0 start"
            fi
            ;;
        logs)
            if [ -f "docker-compose.enterprise.yml" ]; then
                docker-compose -f docker-compose.enterprise.yml logs -f
            else
                log_error "服务未启动，请先运行: $0 start"
            fi
            ;;
        keys)
            check_enterprise_api_keys
            ;;
        help|--help|-h)
            show_help
            ;;
        *)
            log_error "未知命令: $1"
            show_help
            exit 1
            ;;
    esac
}

# 运行主函数
main "$@"
