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

Language Server Protocol 集成，提供代码诊断、补全等功能。
"""

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="获取文件的 LSP 诊断信息（语法错误、类型错误等）")
async def lsp_diagnostics(
    file_path: str,
    uid: str = "",
    context: Optional[ToolContext] = None
) -> ToolResult:
    """
    获取 LSP 诊断信息

    使用 OpenCode 的 LSP 工具（通过 Bun 适配器调用）。
    返回文件的语法错误、类型错误、代码警告等。

    Args:
        file_path: 文件路径
        uid: 用户 ID
        context: 工具上下文

    Returns:
        ToolResult: 诊断信息
    """
    adapter = _get_adapter()

    args = {
        "filePath": file_path,
    }

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