"""原文检索工具:agent 觉得压缩的"局记"不够时,按需调阅**原始**发言/事件。

只在 PlayerView.transcript 上检索 —— 那已是 perception 按身份裁剪过的可见原文,
所以这个工具天然查不到它不该看的东西(狼私聊、他人私有信息一律查不到)。
"""

from __future__ import annotations

from genesis.werewolf.perception import PlayerView

MAX_HITS = 12          # 一次最多回 12 条,避免又把窗口塞爆


def lookup_transcript(view: PlayerView, query: str) -> str:
    """query 三种用法:座位号(如 '3')→ 该座位相关发言;'day:N' → 第 N 天;其余 → 关键词匹配。"""
    q = (query or "").strip()
    evs = view.transcript
    if q.isdigit():
        sel = [e for e in evs if e.get("seat") == int(q)]
        head = f"{q}号 说过/相关的原始记录:"
    elif q.lower().startswith("day:") and q[4:].strip().isdigit():
        d = int(q[4:].strip())
        sel = [e for e in evs if e.get("day") == d]
        head = f"第{d}天的原始发言/事件:"
    elif q:
        sel = [e for e in evs if q in (e.get("text") or "")]
        head = f"含『{q}』的原始记录:"
    else:
        return ""
    if not sel:
        return f"(没查到与『{q}』相关的原始记录)"
    body = "\n".join(f"[第{e['day']}天/{e.get('seat') or '法官'}] {e.get('text', '')}" for e in sel[-MAX_HITS:])
    return head + "\n" + body
