"""
创建调用真实天气 API 的工具
"""
import requests
import json

BASE_URL = "http://localhost:8000/api"

def login():
    """登录获取 token"""
    response = requests.post(f"{BASE_URL}/users/login", data={
        "username": "admin",
        "password": "admin123"
    })
    if response.status_code == 200:
        token = response.json()["access_token"]
        print("[OK] 登录成功")
        return token
    else:
        print("[ERROR] 登录失败:", response.text)
        return None

def create_weather_api_tool(token):
    """创建调用后端天气 API 的工具"""
    headers = {"Authorization": f"Bearer {token}"}
    
    # 这个工具会调用我们后端的天气 API
    weather_tool = {
        "name": "天气查询",
        "description": "查询全国各城市的实时天气信息，包括温度、天气状况、湿度、风力、气压等详细数据",
        "is_code_tool": False,  # 这不是代码工具，而是 API 工具
        "parameters_schema": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "要查询天气的城市名称，例如：北京、上海、广州、深圳、杭州、成都、武汉、西安等",
                    "example": "北京"
                }
            },
            "required": ["city"]
        }
    }
    
    # 检查工具是否已存在
    response = requests.get(f"{BASE_URL}/ai-agents/tools", headers=headers)
    if response.status_code == 200:
        tools = response.json()
        for tool in tools:
            if tool["name"] == "天气查询":
                print(f"[OK] 天气查询工具已存在 (ID={tool['id']})")
                # 更新工具
                response = requests.put(
                    f"{BASE_URL}/ai-agents/tools/{tool['id']}", 
                    json=weather_tool, 
                    headers=headers
                )
                if response.status_code == 200:
                    print("[OK] 工具已更新")
                return tool["id"]
    
    # 创建新工具
    response = requests.post(f"{BASE_URL}/ai-agents/tools", json=weather_tool, headers=headers)
    if response.status_code == 200:
        tool_id = response.json()["id"]
        print(f"[OK] 天气查询工具创建成功 (ID={tool_id})")
        return tool_id
    else:
        print("[ERROR] 创建工具失败:", response.text)
        return None

def test_weather_api(token):
    """测试天气 API"""
    print(f"\n正在测试天气 API...")
    print("="*60)
    
    # 测试多个城市
    test_cities = ["北京", "上海", "广州", "深圳", "杭州", "成都", "武汉"]
    
    for city in test_cities:
        print(f"\n查询城市: {city}")
        print("-"*60)
        
        response = requests.get(f"{BASE_URL}/weather?city={city}")
        
        if response.status_code == 200:
            result = response.json()
            
            if result.get("success"):
                data = result["data"]
                print(f"[OK] 查询成功")
                print(f"  {data['summary']}")
                print(f"  描述: {data['description']}")
            else:
                print(f"[ERROR] 查询失败")
        else:
            print(f"[ERROR] API 请求失败: {response.status_code}")
            print(f"  {response.text}")
    
    print("\n" + "="*60)

def create_weather_assistant(token, tool_id):
    """创建天气助手（数字员工）"""
    headers = {"Authorization": f"Bearer {token}"}
    
    # 首先获取可用的模型
    response = requests.get(f"{BASE_URL}/ai-agents/models", headers=headers)
    if response.status_code != 200 or not response.json():
        print("[ERROR] 没有可用的模型，请先创建一个 AI 模型")
        return None
    
    models = response.json()
    model_id = models[0]["id"]
    
    # 创建天气助手
    weather_assistant = {
        "name": "天气助手小智",
        "model_id": model_id,
        "system_prompt": """你是一个专业的天气助手，名叫小智。你的职责是：
1. 帮助用户查询全国各城市的天气信息
2. 用友好、专业的语气回答用户的天气相关问题
3. 当用户询问天气时，使用天气查询工具获取实时数据
4. 根据天气情况给出合理的建议（如是否需要带伞、穿什么衣服等）

回答风格：
- 简洁明了，重点突出
- 友好亲切，像朋友一样
- 提供实用建议

示例：
用户：北京天气怎么样？
你：让我帮您查询一下北京的天气... [调用工具] 北京今天晴天，温度15°C，天气不错哦！建议穿长袖外套，早晚温差较大注意保暖。""",
        "tool_ids": [tool_id]
    }
    
    # 检查是否已存在
    response = requests.get(f"{BASE_URL}/ai-agents/employees", headers=headers)
    if response.status_code == 200:
        employees = response.json()
        for emp in employees:
            if emp["name"] == "天气助手小智":
                print(f"[OK] 天气助手已存在 (ID={emp['id']})")
                # 更新助手
                response = requests.put(
                    f"{BASE_URL}/ai-agents/employees/{emp['id']}", 
                    json=weather_assistant, 
                    headers=headers
                )
                if response.status_code == 200:
                    print("[OK] 助手已更新")
                return emp["id"]
    
    # 创建新助手
    response = requests.post(f"{BASE_URL}/ai-agents/employees", json=weather_assistant, headers=headers)
    if response.status_code == 200:
        emp_id = response.json()["id"]
        print(f"[OK] 天气助手创建成功 (ID={emp_id})")
        return emp_id
    else:
        print("[ERROR] 创建助手失败:", response.text)
        return None

def main():
    print("="*60)
    print("创建天气查询系统")
    print("="*60)
    
    # 登录
    token = login()
    if not token:
        print("无法继续，请先创建管理员账号")
        print("运行: python create_admin.py")
        return
    
    # 测试天气 API
    print("\n--- 测试天气 API ---")
    test_weather_api(token)
    
    # 创建天气查询工具
    print("\n--- 创建天气查询工具 ---")
    tool_id = create_weather_api_tool(token)
    
    if tool_id:
        # 创建天气助手
        print("\n--- 创建天气助手 ---")
        assistant_id = create_weather_assistant(token, tool_id)
    
    print("\n" + "="*60)
    print("完成！天气查询系统已就绪")
    print("="*60)
    print("\n[OK] 已创建：")
    print("  1. 天气 API 端点: GET /api/weather?city=城市名")
    print("  2. 天气查询工具: 可在工具管理中查看")
    if tool_id:
        print(f"     工具 ID: {tool_id}")
    if 'assistant_id' in locals() and assistant_id:
        print("  3. 天气助手小智: 可在数字员工管理中查看")
        print(f"     助手 ID: {assistant_id}")
    
    print("\n使用方法：")
    print("  1. 直接调用 API:")
    print("     curl http://localhost:8000/api/weather?city=北京")
    print("\n  2. 在管理后台:")
    print("     - 工具管理 -> 查看'天气查询'工具")
    print("     - 数字员工管理 -> 查看'天气助手小智'")
    print("\n  3. 在用户前端:")
    print("     - 与天气助手小智对话")
    print("     - 询问任何城市的天气")
    
    print("\n示例对话：")
    print("  用户: 北京天气怎么样？")
    print("  小智: 让我帮您查询... 北京今天晴天，温度15°C...")
    print("\n  用户: 上海会下雨吗？")
    print("  小智: 让我看看上海的天气... [查询并回答]")
    
    print("\n支持的城市：")
    print("  全国所有城市，包括：")
    print("  - 直辖市: 北京、上海、天津、重庆")
    print("  - 省会: 广州、杭州、成都、武汉、西安、南京等")
    print("  - 其他: 深圳、苏州、青岛、大连、厦门、珠海等")

if __name__ == "__main__":
    main()
