"""에이전트 메시지 포맷팅."""
from html import escape as _h
from typing import Literal, Optional

from .agent_registry import get_agent_meta

MessageKind = Literal["report", "alert", "approval", "error", "info"]

KIND_ICONS = {
    "report": "📊",
    "alert": "🔔",
    "approval": "✋",
    "error": "⚠️",
    "info": "ℹ️",
}


def format_agent_message(
    agent_id: str,
    kind: MessageKind,
    title: str,
    body: str,
    metadata: Optional[dict] = None,
    body_is_html: bool = False,
) -> str:
    meta = get_agent_meta(agent_id)
    icon = KIND_ICONS.get(kind, "")
    header = f"{icon} <b>[{_h(meta['emoji'])} {_h(meta['display_name'])}]</b> {_h(title)}"

    # Telegram 단일 메시지 4096자 제한 대응 (헤더/푸터 여유 512자 확보)
    # body_is_html=True 면 호출자가 이미 HTML-safe하게 구성한 것으로 간주 (예: <a> 링크 포함)
    safe_body = body if body_is_html else _h(body)
    if len(safe_body) > 3500:
        safe_body = safe_body[:3500] + "\n…(생략)"

    lines = [header, "━" * 20, safe_body]

    if metadata:
        footer_parts = []
        if "tokens" in metadata:
            footer_parts.append(f"🧮 {metadata['tokens']:,} tokens")
        if "duration_ms" in metadata:
            seconds = metadata["duration_ms"] / 1000
            footer_parts.append(f"⏱ {seconds:.1f}s")
        if "model" in metadata:
            footer_parts.append(f"🤖 {metadata['model']}")
        if footer_parts:
            lines.append("")
            lines.append(f"<i>{_h(' · '.join(footer_parts))}</i>")

    return "\n".join(lines)
