#!/bin/bash

# 🖥️ Desktop MCP服务启动脚本
# 基于awesome-mcp-servers项目的桌面自动化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"; }

# 显示服务介绍
show_service_intro() {
    echo ""
    log_highlight "🖥️ Desktop MCP服务 - 桌面自动化解决方案"
    echo ""
    echo "📦 包含4个强大的Desktop自动化服务："
    echo ""
    echo "🤖 Computer-Use Agent (CUA):"
    echo "  • 最热门的桌面自动化MCP服务"
    echo "  • AI驱动的完整计算机控制"
    echo "  • Streamlit可视化界面"
    echo "  • 支持复杂任务自动化"
    echo ""
    echo "🎯 ScreenPilot:"
    echo "  • 精确的GUI交互控制"
    echo "  • 屏幕截图和分析"
    echo "  • 鼠标键盘操作模拟"
    echo "  • 安全模式保护"
    echo ""
    echo "💬 Interactive MCP:"
    echo "  • 本地用户交互服务"
    echo "  • 实时对话和确认"
    echo "  • Web界面操作"
    echo "  • 安全控制流程"
    echo ""
    echo "📊 Desktop Dashboard:"
    echo "  • 统一监控面板"
    echo "  • 服务状态管理"
    echo "  • 快速访问链接"
    echo "  • 实时状态更新"
    echo ""
}

# 检查系统要求
check_system_requirements() {
    log_info "检查Desktop MCP系统要求..."
    
    # 检查Docker
    if ! command -v docker &> /dev/null; then
        log_error "Docker 未安装，Desktop MCP服务需要Docker支持"
        exit 1
    fi
    
    # 检查Docker Compose
    if ! command -v docker-compose &> /dev/null; then
        log_error "Docker Compose 未安装"
        exit 1
    fi
    
    # 检查操作系统
    OS="$(uname -s)"
    case "${OS}" in
        Linux*)     MACHINE=Linux;;
        Darwin*)    MACHINE=Mac;;
        CYGWIN*)    MACHINE=Cygwin;;
        MINGW*)     MACHINE=MinGw;;
        *)          MACHINE="UNKNOWN:${OS}"
    esac
    
    log_info "检测到操作系统: $MACHINE"
    
    # macOS特殊检查
    if [[ "$MACHINE" == "Mac" ]]; then
        log_warning "macOS系统检测到，某些GUI自动化功能可能需要额外权限"
        log_info "请确保已在 系统偏好设置 > 安全性与隐私 > 辅助功能 中授权相关应用"
    fi
    
    # Linux X11检查
    if [[ "$MACHINE" == "Linux" ]]; then
        if [[ -z "$DISPLAY" ]]; then
            log_warning "未检测到DISPLAY环境变量，GUI自动化可能无法正常工作"
            log_info "请确保X11服务正在运行，或设置DISPLAY=:0"
        fi
    fi
    
    log_success "系统要求检查完成"
}

# 检查API密钥配置
check_api_keys() {
    log_info "检查Desktop MCP API密钥配置..."
    
    echo ""
    echo -e "${CYAN}📋 Desktop MCP API密钥状态:${NC}"
    
    # 必需的API密钥
    echo -e "${YELLOW}⚡ Computer-Use Agent:${NC}"
    if grep -q "^ANTHROPIC_API_KEY=.*[^_here]$" .env 2>/dev/null; then
        echo "  ✅ Anthropic API Key - 已配置"
    else
        echo "  ❌ Anthropic API Key - 未配置 (CUA需要)"
    fi
    
    # 可选配置
    echo ""
    echo -e "${GREEN}✅ 无需API密钥的服务:${NC}"
    echo "  • ScreenPilot - GUI自动化"
    echo "  • Interactive MCP - 用户交互"
    echo "  • Desktop Dashboard - 监控面板"
    
    echo ""
    echo -e "${BLUE}💡 配置说明:${NC}"
    echo "  • Computer-Use Agent需要Anthropic API密钥"
    echo "  • 其他服务可直接使用，无需额外配置"
    echo "  • 编辑 .env 文件配置API密钥"
}

# 创建数据目录
setup_directories() {
    log_info "创建Desktop MCP数据目录..."
    
    mkdir -p mcp-data/{computer-use,screenpilot,interactive}
    
    # 创建示例配置文件
    cat > mcp-data/computer-use/README.md << 'EOF'
# Computer-Use Agent 数据目录

这个目录用于存储Computer-Use Agent的数据和配置。

## 功能特性
- 🤖 AI驱动的桌面自动化
- 🖥️ 完整的计算机控制能力
- 📊 Streamlit可视化界面
- 🔧 复杂任务自动化

## 访问地址
- Web界面: http://localhost:8501
- MCP服务: http://localhost:8080

## 使用说明
1. 确保已配置Anthropic API密钥
2. 访问Web界面进行操作
3. 通过MCP协议集成到Claude Desktop
EOF
    
    cat > mcp-data/screenpilot/README.md << 'EOF'
# ScreenPilot 数据目录

这个目录用于存储ScreenPilot的截图和操作记录。

## 功能特性
- 📸 屏幕截图和分析
- 🖱️ 精确的鼠标控制
- ⌨️ 键盘输入模拟
- 🛡️ 安全模式保护

## 支持的操作
- screenshot: 截取屏幕
- click: 鼠标点击
- type: 键盘输入
- key: 按键操作
EOF
    
    cat > mcp-data/interactive/README.md << 'EOF'
# Interactive MCP 数据目录

这个目录用于存储用户交互记录和会话数据。

## 功能特性
- 💬 实时用户交互
- 🌐 Web界面操作
- ✅ 任务确认机制
- 🔒 安全控制流程

## 访问地址
- 交互面板: http://localhost:3000

## 使用说明
1. 访问Web界面查看待处理的提示
2. 输入回复确认或拒绝操作
3. 支持实时双向通信
EOF
    
    log_success "数据目录创建完成"
}

# 启动Desktop MCP服务
start_desktop_services() {
    show_service_intro
    check_system_requirements
    check_api_keys
    
    # 检查环境变量文件
    if [ ! -f ".env" ]; then
        log_error "环境变量文件 .env 不存在"
        exit 1
    fi
    
    setup_directories
    
    log_info "启动Desktop MCP服务集群..."
    
    # 拉取镜像
    log_info "拉取Docker镜像..."
    docker-compose -f docker-compose.desktop.yml pull
    
    # 启动服务
    log_info "启动服务容器..."
    docker-compose -f docker-compose.desktop.yml up -d
    
    # 等待服务启动
    log_info "等待服务启动 (30秒)..."
    sleep 30
    
    # 检查服务状态
    show_service_status
}

# 显示服务状态
show_service_status() {
    log_info "Desktop MCP服务状态："
    echo ""
    
    docker-compose -f docker-compose.desktop.yml ps
    
    echo ""
    log_info "服务健康检查："
    
    # 检查各个服务
    services=(
        "mcp-computer-use-desktop:Computer-Use Agent"
        "mcp-screenpilot-desktop:ScreenPilot GUI自动化"
        "mcp-interactive-desktop:Interactive MCP用户交互"
        "mcp-desktop-dashboard:Desktop监控面板"
    )
    
    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 "Desktop MCP服务集群启动完成！"
    
    # 显示访问信息
    show_access_info
}

# 显示访问信息
show_access_info() {
    echo ""
    log_highlight "=== 🌐 访问地址 ==="
    echo ""
    echo "🤖 Computer-Use Agent:"
    echo "  • Web界面: http://localhost:8501"
    echo "  • MCP服务: http://localhost:8080"
    echo ""
    echo "💬 Interactive MCP:"
    echo "  • 交互面板: http://localhost:3000"
    echo ""
    echo "📊 Desktop Dashboard:"
    echo "  • 监控面板: http://localhost:8090"
    echo ""
    echo "🔧 管理命令:"
    echo "  • 查看状态: docker-compose -f docker-compose.desktop.yml ps"
    echo "  • 查看日志: docker-compose -f docker-compose.desktop.yml logs"
    echo "  • 停止服务: docker-compose -f docker-compose.desktop.yml down"
    echo "  • 重启服务: docker-compose -f docker-compose.desktop.yml restart"
    echo ""
    log_highlight "🎉 现在你可以使用强大的Desktop自动化MCP服务了！"
}

# 停止服务
stop_services() {
    log_info "停止Desktop MCP服务..."
    docker-compose -f docker-compose.desktop.yml down
    log_success "服务已停止"
}

# 重启服务
restart_services() {
    log_info "重启Desktop MCP服务..."
    stop_services
    sleep 3
    start_desktop_services
}

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

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

# 运行主函数
main "$@"
