"""Maisaka 展示辅助工具。"""

from typing import Any


_REQUEST_PANEL_STYLE_MAP: dict[str, tuple[str, str]] = {
    "planner": ("MaiSaka 大模型请求 - 对话单步", "green"),
    "timing_gate": ("MaiSaka 大模型请求 - Timing Gate 子代理", "bright_magenta"),
    "replyer": ("MaiSaka 回复器 Prompt", "bright_yellow"),
    "emotion": ("MaiSaka Emotion Tool Prompt", "bright_cyan"),
    "sub_agent": ("MaiSaka 大模型请求 - 子代理", "bright_blue"),
}

_DEFAULT_REQUEST_PANEL_STYLE: tuple[str, str] = (
    "MaiSaka 大模型请求 - 对话单步",
    "cyan",
)

_ROLE_BADGE_STYLE_MAP: dict[str, str] = {
    "system": "bold white on blue",
    "user": "bold black on green",
    "assistant": "bold black on yellow",
    "tool": "bold white on magenta",
}

_ROLE_BADGE_LABEL_MAP: dict[str, str] = {
    "system": "系统",
    "user": "用户",
    "assistant": "助手",
    "tool": "工具",
}


def format_token_count(token_count: int) -> str:
    """格式化 token 数量展示文本。"""

    if token_count >= 10_000:
        return f"{token_count / 1000:.1f}k"
    return str(token_count)


def get_request_panel_style(request_kind: str) -> tuple[str, str]:
    """返回不同请求类型对应的标题与边框颜色。"""

    normalized_kind = str(request_kind or "planner").strip().lower()
    return _REQUEST_PANEL_STYLE_MAP.get(normalized_kind, _DEFAULT_REQUEST_PANEL_STYLE)


def get_role_badge_style(role: str) -> str:
    """返回角色标签对应的 rich 样式。"""

    return _ROLE_BADGE_STYLE_MAP.get(role, "bold white on bright_black")


def get_role_badge_label(role: str) -> str:
    """返回角色标签对应的展示文案。"""

    return _ROLE_BADGE_LABEL_MAP.get(role, "未知")


def format_tool_call_for_display(tool_call: Any) -> dict[str, Any]:
    """将不同来源的工具调用对象规范化为统一展示结构。"""

    if isinstance(tool_call, dict):
        function_info = tool_call.get("function", {})
        return {
            "id": tool_call.get("id"),
            "name": function_info.get("name", tool_call.get("name")),
            "arguments": function_info.get("arguments", tool_call.get("arguments")),
        }

    return {
        "id": getattr(tool_call, "call_id", getattr(tool_call, "id", None)),
        "name": getattr(tool_call, "func_name", getattr(tool_call, "name", None)),
        "arguments": getattr(tool_call, "args", getattr(tool_call, "arguments", None)),
    }


def build_tool_call_summary_lines(tool_calls: list[Any]) -> list[str]:
    """构建工具调用摘要文本。"""

    summary_lines: list[str] = []
    for tool_call in tool_calls:
        normalized_tool_call = format_tool_call_for_display(tool_call)
        tool_name = str(normalized_tool_call.get("name") or "").strip() or "unknown"
        tool_args = normalized_tool_call.get("arguments")
        if isinstance(tool_args, dict) and tool_args:
            summary_lines.append(f"- {tool_name}: {tool_args}")
        else:
            summary_lines.append(f"- {tool_name}")
    return summary_lines
