#!/usr/bin/env python3
"""
测试新添加的API接口
验证Web客户端与后端API的连接是否正常
"""

import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from utils.api_client import MCPStoreAPI
import json

def test_api_connection():
    """测试API连接"""
    print("🔗 测试API连接...")
    
    # 创建API客户端
    api_client = MCPStoreAPI("http", "http://localhost:18611")
    
    # 测试基本连接
    if api_client.backend.test_connection():
        print("✅ API连接成功")
        return api_client
    else:
        print("❌ API连接失败")
        return None

def test_monitoring_apis(api_client):
    """测试监控相关API"""
    print("\n📊 测试监控API...")
    
    # 测试获取监控状态
    print("  - 测试获取监控状态...")
    status = api_client.get_monitoring_status()
    if status:
        print("    ✅ 监控状态获取成功")
        print(f"    📈 监控任务状态: {status.get('data', {}).get('monitoring_tasks', {})}")
    else:
        print("    ❌ 监控状态获取失败")
    
    # 测试获取系统健康状态
    print("  - 测试获取系统健康状态...")
    health = api_client.get_health()
    if health:
        print("    ✅ 系统健康状态获取成功")
        print(f"    🏥 系统状态: {health.get('data', {}).get('status', 'unknown')}")
    else:
        print("    ❌ 系统健康状态获取失败")

def test_service_management_apis(api_client):
    """测试服务管理API"""
    print("\n🛠️ 测试服务管理API...")
    
    # 测试获取服务列表
    print("  - 测试获取服务列表...")
    services = api_client.list_services()
    if services:
        service_count = len(services.get('data', []))
        print(f"    ✅ 服务列表获取成功，共 {service_count} 个服务")
        
        # 如果有服务，测试获取服务详情
        if service_count > 0:
            first_service = services['data'][0]
            service_name = first_service.get('name')
            if service_name:
                print(f"  - 测试获取服务详情: {service_name}")
                service_info = api_client.get_service_info(service_name)
                if service_info:
                    print("    ✅ 服务详情获取成功")
                else:
                    print("    ❌ 服务详情获取失败")
    else:
        print("    ❌ 服务列表获取失败")

def test_agent_management_apis(api_client):
    """测试Agent管理API"""
    print("\n👥 测试Agent管理API...")
    
    # 测试Agent ID
    test_agent_id = "test_agent_001"
    
    # 测试获取Agent服务列表
    print(f"  - 测试获取Agent服务列表: {test_agent_id}")
    agent_services = api_client.list_agent_services(test_agent_id)
    if agent_services:
        service_count = len(agent_services.get('data', []))
        print(f"    ✅ Agent服务列表获取成功，共 {service_count} 个服务")
    else:
        print("    ⚠️ Agent服务列表获取失败（可能Agent不存在）")
    
    # 测试获取Agent工具列表
    print(f"  - 测试获取Agent工具列表: {test_agent_id}")
    agent_tools = api_client.list_agent_tools(test_agent_id)
    if agent_tools:
        tool_count = len(agent_tools.get('data', []))
        print(f"    ✅ Agent工具列表获取成功，共 {tool_count} 个工具")
    else:
        print("    ⚠️ Agent工具列表获取失败（可能Agent不存在）")
    
    # 测试获取Agent统计信息
    print(f"  - 测试获取Agent统计信息: {test_agent_id}")
    agent_stats = api_client.get_agent_stats(test_agent_id)
    if agent_stats:
        print("    ✅ Agent统计信息获取成功")
        stats_data = agent_stats.get('data', {})
        print(f"    📊 服务数: {stats_data.get('services', {}).get('total', 0)}")
        print(f"    🔧 工具数: {stats_data.get('tools', {}).get('total', 0)}")
    else:
        print("    ⚠️ Agent统计信息获取失败（可能Agent不存在）")

def test_batch_operations(api_client):
    """测试批量操作API"""
    print("\n📦 测试批量操作API...")
    
    # 测试批量添加服务（使用测试数据）
    print("  - 测试批量添加服务...")
    test_services = [
        {
            "name": "test_service_1",
            "url": "http://example.com/test1",
            "transport": "streamable-http"
        },
        {
            "name": "test_service_2", 
            "url": "http://example.com/test2",
            "transport": "streamable-http"
        }
    ]
    
    # 注意：这里只是测试API调用，不会真正添加服务
    print("    ⚠️ 跳过批量添加测试（避免添加测试服务）")

def test_configuration_apis(api_client):
    """测试配置管理API"""
    print("\n⚙️ 测试配置管理API...")
    
    # 测试获取配置
    print("  - 测试获取Store配置...")
    config = api_client.get_config()
    if config:
        print("    ✅ Store配置获取成功")
    else:
        print("    ❌ Store配置获取失败")
    
    # 测试显示MCP配置
    print("  - 测试显示MCP配置...")
    mcp_config = api_client.show_mcpconfig()
    if mcp_config:
        print("    ✅ MCP配置获取成功")
    else:
        print("    ❌ MCP配置获取失败")

def main():
    """主测试函数"""
    print("🧪 MCPStore Web API 接口测试")
    print("=" * 50)
    
    # 测试API连接
    api_client = test_api_connection()
    if not api_client:
        print("❌ 无法连接到API服务器，请确保MCPStore API服务正在运行")
        return
    
    try:
        # 测试各类API
        test_monitoring_apis(api_client)
        test_service_management_apis(api_client)
        test_agent_management_apis(api_client)
        test_batch_operations(api_client)
        test_configuration_apis(api_client)
        
        print("\n" + "=" * 50)
        print("✅ API接口测试完成")
        print("📝 注意：部分Agent相关API可能返回失败，这是正常的（如果没有对应的Agent）")
        
    except Exception as e:
        print(f"\n❌ 测试过程中发生错误: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    main()
