"""
网页搜索工具
"""
import httpx
from typing import Optional


async def search_web(query: str, max_results: int = 5) -> dict:
    """
    搜索网页获取信息

    Args:
        query: 搜索关键词
        max_results: 返回结果数量

    Returns:
        搜索结果
    """
    # 这里可以使用搜索引擎API，如 Google, Bing, DuckDuckGo 等
    # 示例使用 DuckDuckGo API（免费）

    try:
        async with httpx.AsyncClient() as client:
            response = await client.get(
                "https://api.duckduckgo.com/",
                params={
                    "q": query,
                    "format": "json",
                    "no_html": 1,
                    "skip_disambig": 1
                },
                timeout=10.0
            )

            if response.status_code == 200:
                data = response.json()
                results = []

                # 提取相关主题
                if "RelatedTopics" in data:
                    for item in data["RelatedTopics"][:max_results]:
                        if "Text" in item:
                            results.append({
                                "title": item.get("Text", "").split(" - ")[0] if " - " in item.get("Text", "") else "",
                                "content": item.get("Text", ""),
                                "url": item.get("URL", "")
                            })

                return {
                    "success": True,
                    "query": query,
                    "results": results,
                    "count": len(results)
                }
            else:
                return {
                    "success": False,
                    "error": f"Search API returned status {response.status_code}"
                }

    except Exception as e:
        return {
            "success": False,
            "error": str(e)
        }


# 工具定义（用于 LLM）
TOOL_DEFINITION = {
    "name": "search",
    "description": "Search the web for information. Use this when you need to find current information or facts.",
    "parameters": {
        "type": "object",
        "properties": {
            "query": {
                "type": "string",
                "description": "The search query"
            },
            "max_results": {
                "type": "integer",
                "description": "Maximum number of results to return",
                "default": 5
            }
        },
        "required": ["query"]
    }
}
