"""
WebFetch Tool - 通过 Bun 适配器调用 OpenCode

网页抓取功能，包括 HTML 转 Markdown、内容提取等复杂逻辑。
"""

from typing import Optional
from agent.tools import tool, ToolResult, ToolContext
from agent.tools.adapters.opencode_bun_adapter import OpenCodeBunAdapter


# 创建适配器实例
_adapter = None

def _get_adapter():
    global _adapter
    if _adapter is None:
        _adapter = OpenCodeBunAdapter()
    return _adapter


@tool(description="抓取网页内容并转换为 Markdown 格式")
async def webfetch(
    url: str,
    format: str = "markdown",
    timeout: Optional[int] = None,
    uid: str = "",
    context: Optional[ToolContext] = None
) -> ToolResult:
    """
    抓取网页内容

    使用 OpenCode 的 webfetch 工具（通过 Bun 适配器调用）。
    包含 HTML 到 Markdown 转换、内容清理等功能。

    Args:
        url: 网页 URL
        format: 输出格式（markdown, text, html），默认 markdown
        timeout: 超时时间（秒）
        uid: 用户 ID
        context: 工具上下文

    Returns:
        ToolResult: 网页内容
    """
    adapter = _get_adapter()

    args = {
        "url": url,
        "format": format,
    }

    if timeout is not None:
        args["timeout"] = timeout

    return await adapter.adapt_execute(
        tool_name="webfetch",
        args=args,
        context=context
    )
