import asyncio
from python_a2a import AgentNetwork, AIAgentRouter, A2AClient, Task, Message, MessageRole, TextContent
import json
import uuid

from time import sleep


async def main():
    # 1.创建 AgentNetwork
    # 实例化对象
    network = AgentNetwork(name='TravelAgentNetwork')
    # 添加 agent  name可以自己定义
    network.add(name='WeatherAgent', agent_or_url='http://127.0.0.1:5008')
    network.add(name='TicketAgent', agent_or_url='http://127.0.0.1:5009')
    # 打印agent server信息
    for agent_info in network.list_agents():
        print(json.dumps(agent_info, indent=4, ensure_ascii=False))

    # 2.创建AIAgentRouter
    # 创建路由器
    router = AIAgentRouter(llm_client=A2AClient("http://127.0.0.1:5555"),
                           agent_network=network)

    # 3. 测试查询
    queries = [
        "帮我查下北京的天气",  # 应该路由到 WeatherAgent
        "预订一张从北京到上海的火车票",  # 应该路由到 TicketAgent
        "帮我查下北京的天气，并预订一张从北京到上海的火车票"  # 复合意图
    ]
    for query in queries:
        print(f"[主控日志] 用户查询: '{query}'")
        # 使用路由器选择agent
        agent_name, confidence = router.route_query(query)
        print(f"[主控日志] 匹配的agent: '{agent_name}', 匹配度: {confidence}")
        if agent_name:
            # 基于 agent_name 获取对应的 agent server
            agent_client = network.get_agent(agent_name)
            if agent_client:
                # Message用来存储具体的任务内容
                message = Message(content=TextContent(text=query), role=MessageRole.USER)
                # Task中存储和封装Message
                agent_task = Task(message=message.to_dict(), id="task-" + str(uuid.uuid4()))
                # 使用 send_task_async 实现异步调用
                try:
                    agent_result = await agent_client.send_task_async(agent_task)
                    print("[主控日志] agent返回结果:")
                    print(json.dumps(agent_result.to_dict(), indent=4, ensure_ascii=False))
                except Exception as e:
                    print(f"[主控日志] agent调用失败: '{e}'")




if __name__ == '__main__':
    asyncio.run(main())