#!/usr/bin/env python3
"""
GitCode MCP 代理配置示例

这个示例展示了如何在 GitCode MCP 中配置和使用 HTTP 代理。
"""
import asyncio
import sys
import os

from dotenv import load_dotenv
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import json

# 加载环境变量
load_dotenv()

async def run_client():
    """测试使用代理的情况"""
    print("=" * 60)
    print("使用 HTTP 代理")
    print("=" * 60)
    
    # 示例代理地址(请替换为您实际的代理地址)
    print(f"代理地址: {os.environ.get("HTTP_PROXY")}")
    print()
    
    server_params = StdioServerParameters(
        command=sys.executable,
        args=['-m', 'gitcode_mcp'],
        env={
            'GITCODE_TOKEN': os.environ.get("GITCODE_TOKEN"),
            'HTTP_PROXY': os.environ.get("HTTP_PROXY"),
        }
    )
    
    try:
        async with stdio_client(server_params) as (read, write):
            async with ClientSession(read, write) as session:
                await session.initialize()
                
                print("✅ MCP 服务器连接成功(使用代理)")
                
                # 调用工具并将结果内容序列化成数组
                result = await session.call_tool("list_repositories", arguments={})
                repos = []
                if result.content:
                    for content_item in result.content:
                        # 假设 content_item.text 是一个JSON字符串,需反序列化
                        if hasattr(content_item, 'text'):
                            try:
                                data = json.loads(content_item.text)
                                if isinstance(data, list):
                                    repos.extend(data)
                                else:
                                    repos.append(data)
                            except Exception:
                                repos.append(content_item.text)
                        else:
                            repos.append(content_item)
                print(f"✅ 通过代理成功获取仓库列表: {len(repos)} 个仓库")
    except Exception as e:
        print(f"❌ 连接失败: {e}")
        print("   提示: 请确保代理服务器正在运行且地址正确")
    
    print()

if __name__ == "__main__":
    try:
        asyncio.run(run_client())
    except KeyboardInterrupt:
        print("\n\n⚠️  测试被用户中断")
    except Exception as e:
        print(f"\n❌ 发生错误: {e}")
        import traceback
        traceback.print_exc()