"""
MCP 客户端测试脚本
直接测试 MCP 服务器的工具调用功能
"""
import asyncio
import os
from musicmcp_ai_mcp.api import (
    validate_api_key,
    check_api_health,
    get_api_info,
    generate_prompt_song
)


async def test_mcp_tools():
    """测试所有 MCP 工具"""
    print("🧪 开始 MCP 工具测试")
    print("=" * 60)

    # 检查环境变量
    api_key = os.getenv('MUSICMCP_API_KEY')
    if not api_key:
        print("⚠️  警告: MUSICMCP_API_KEY 未设置")
        print("   某些测试可能会跳过")
    print()

    # 测试 1: API 健康检查（不需要密钥）
    print("1️⃣ 测试 API 健康检查")
    print("-" * 60)
    try:
        result = await check_api_health()
        print(f"✅ 成功")
        print(f"   返回类型: {type(result)}")
        print(f"   内容: {result.text}")
    except Exception as e:
        print(f"❌ 失败: {str(e)}")
    print()

    # 测试 2: 获取 API 信息（不需要密钥）
    print("2️⃣ 测试获取 API 信息")
    print("-" * 60)
    try:
        result = await get_api_info()
        print(f"✅ 成功")
        print(f"   返回类型: {type(result)}")
        print(f"   内容预览: {result.text[:200]}...")
    except Exception as e:
        print(f"❌ 失败: {str(e)}")
    print()

    # 测试 3: 验证 API 密钥（需要密钥）
    if api_key:
        print("3️⃣ 测试 API 密钥验证")
        print("-" * 60)
        try:
            result = await validate_api_key()
            print(f"✅ 成功")
            print(f"   返回类型: {type(result)}")
            print(f"   内容: {result.text}")
        except Exception as e:
            print(f"❌ 失败: {str(e)}")
        print()
    else:
        print("3️⃣ 跳过 API 密钥验证（未设置密钥）")
        print()

    # 测试 4: 生成音乐（需要密钥和积分，慎重执行）
    # 默认注释掉，避免消耗积分
    """
    if api_key:
        print("4️⃣ 测试音乐生成（灵感模式）")
        print("-" * 60)
        print("⚠️  此测试会消耗 5 积分！")

        # 取消注释以启用测试
        # try:
        #     result = await generate_prompt_song(
        #         prompt="A peaceful morning test song",
        #         instrumental=True
        #     )
        #     print(f"✅ 成功")
        #     print(f"   生成歌曲数: {len(result)}")
        #     for i, item in enumerate(result, 1):
        #         print(f"   歌曲 {i}: {item.text[:100]}...")
        # except Exception as e:
        #     print(f"❌ 失败: {str(e)}")
        # print()
    """

    print("=" * 60)
    print("🏁 MCP 工具测试完成！")


if __name__ == "__main__":
    asyncio.run(test_mcp_tools())
