#!/bin/bash

# MCP服务管理脚本
# 提供启动、停止、重启、状态检查等功能

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 显示帮助信息
show_help() {
    echo -e "${BLUE}MCP服务管理工具${NC}"
    echo ""
    echo "用法: $0 [命令]"
    echo ""
    echo "可用命令:"
    echo "  start     启动所有MCP服务"
    echo "  stop      停止所有MCP服务"
    echo "  restart   重启所有MCP服务"
    echo "  status    查看服务状态"
    echo "  logs      查看服务日志"
    echo "  clean     清理停止的容器和未使用的镜像"
    echo "  setup     初始化环境配置"
    echo "  help      显示此帮助信息"
    echo ""
    echo "示例:"
    echo "  $0 start          # 启动所有服务"
    echo "  $0 logs           # 查看所有服务日志"
    echo "  $0 logs github    # 查看GitHub服务日志"
    echo ""
}

# 检查Docker是否运行
check_docker() {
    if ! docker info > /dev/null 2>&1; then
        echo -e "${RED}❌ Docker未运行，请先启动Docker${NC}"
        exit 1
    fi
}

# 启动服务
start_services() {
    echo -e "${GREEN}🚀 启动MCP服务...${NC}"
    check_docker
    
    # 检查环境变量文件
    if [ ! -f ".env" ]; then
        echo -e "${YELLOW}⚠️  未找到 .env 文件，正在创建...${NC}"
        setup_env
        echo -e "${YELLOW}请编辑 .env 文件，填入您的真实API密钥，然后重新运行启动命令${NC}"
        return 1
    fi
    
    # 停止现有进程
    echo -e "${YELLOW}🛑 停止现有的MCP进程...${NC}"
    pkill -f "mcp-" 2>/dev/null || true
    pkill -f "@browserbasehq/mcp-browserbase" 2>/dev/null || true
    pkill -f "@adalovu/mcp-playwright" 2>/dev/null || true
    pkill -f "mcp-server-memory" 2>/dev/null || true
    pkill -f "browser-tools-mcp" 2>/dev/null || true
    pkill -f "@upstash/context7-mcp" 2>/dev/null || true
    
    # 启动Docker服务
    docker-compose down 2>/dev/null || true
    docker-compose up -d
    
    echo -e "${GREEN}✅ MCP服务启动完成！${NC}"
    sleep 3
    show_status
}

# 停止服务
stop_services() {
    echo -e "${YELLOW}🛑 停止MCP服务...${NC}"
    docker-compose down 2>/dev/null || true
    
    # 停止本地进程
    pkill -f "mcp-" 2>/dev/null || true
    pkill -f "@browserbasehq/mcp-browserbase" 2>/dev/null || true
    pkill -f "@adalovu/mcp-playwright" 2>/dev/null || true
    pkill -f "mcp-server-memory" 2>/dev/null || true
    pkill -f "browser-tools-mcp" 2>/dev/null || true
    pkill -f "@upstash/context7-mcp" 2>/dev/null || true
    
    echo -e "${GREEN}✅ 所有MCP服务已停止${NC}"
}

# 重启服务
restart_services() {
    echo -e "${BLUE}🔄 重启MCP服务...${NC}"
    stop_services
    sleep 2
    start_services
}

# 显示状态
show_status() {
    echo -e "${BLUE}📊 MCP服务状态:${NC}"
    echo ""
    
    if docker-compose ps 2>/dev/null | grep -q "Up"; then
        docker-compose ps
    else
        echo -e "${YELLOW}没有运行中的Docker服务${NC}"
    fi
    
    echo ""
    echo -e "${BLUE}本地MCP进程:${NC}"
    ps aux | grep -E "(mcp-|@browserbasehq|@adalovu|browser-tools|@upstash)" | grep -v grep || echo -e "${YELLOW}没有运行中的本地MCP进程${NC}"
}

# 显示日志
show_logs() {
    if [ -n "$2" ]; then
        echo -e "${BLUE}📝 显示 $2 服务日志:${NC}"
        docker-compose logs -f "mcp-$2"
    else
        echo -e "${BLUE}📝 显示所有服务日志:${NC}"
        docker-compose logs -f
    fi
}

# 清理
clean_docker() {
    echo -e "${YELLOW}🧹 清理Docker资源...${NC}"
    docker-compose down
    docker system prune -f
    echo -e "${GREEN}✅ 清理完成${NC}"
}

# 初始化环境
setup_env() {
    echo -e "${BLUE}🔧 初始化环境配置...${NC}"
    
    # 创建目录
    mkdir -p mcp-configs mcp-data/memory mcp-data/filesystem
    
    # 复制环境变量文件
    if [ -f ".env.mcp" ] && [ ! -f ".env" ]; then
        cp .env.mcp .env
        echo -e "${GREEN}✅ 已创建 .env 文件${NC}"
    fi
    
    echo -e "${YELLOW}⚠️  请编辑 .env 文件，填入您的真实API密钥:${NC}"
    echo "   - GITHUB_PERSONAL_ACCESS_TOKEN"
    echo "   - BROWSERBASE_API_KEY"
    echo "   - CONTEXT7_API_KEY"
    echo "   - 其他相关配置"
}

# 主逻辑
case "${1:-help}" in
    start)
        start_services
        ;;
    stop)
        stop_services
        ;;
    restart)
        restart_services
        ;;
    status)
        show_status
        ;;
    logs)
        show_logs "$@"
        ;;
    clean)
        clean_docker
        ;;
    setup)
        setup_env
        ;;
    help|*)
        show_help
        ;;
esac
