#!/usr/bin/env python3
"""A-1 후속 — ①을 다시 잰다(span 이름으로 쟀더니 0/0 이라 헛쟀다) + ⑤ 뿌리 확인."""
import sys
from collections import Counter

sys.path.insert(0, "/Users/manta/Documents/Projects/TheRoad-I1/scratchpad")
from _opik_env import opik_target  # noqa: E402
from tools.opik_prompt_audit.audit.fetch import (  # noqa: E402
    fetch_spans, fetch_trace_index)

BASE, WS, PROJ = opik_target()
SINCE, UNTIL = "2026-08-28T03:20:00", "2026-08-28T06:10:00"

spans = fetch_spans(BASE, WS, PROJ, SINCE, UNTIL)
traces = fetch_trace_index(BASE, WS, PROJ, SINCE, UNTIL)
print(f"span {len(spans)} · trace {len(traces)}\n")

# ── ① 스텝 태그가 아예 없는 span ──────────────────────────────
no_step = [s for s in spans
           if not any(t.startswith("step:") for t in (s.get("tags") or []))]
print(f"① 스텝 태그 없는 span: {len(no_step)} / {len(spans)}")
print("   이름별:")
for k, v in Counter(s.get("name") or "(이름없음)" for s in no_step).most_common(15):
    print(f"     {v:>4}  {k}")
print("   모델별:")
for k, v in Counter(s.get("model") or "(모델없음)" for s in no_step).most_common(10):
    print(f"     {v:>4}  {k}")

# ── ② 평평한 trace 가 무엇인가 ────────────────────────────────
flat = [t for t in traces.values() if (t.get("name") or "") == "chat.completion"]
print(f"\n② 평평한 trace {len(flat)} — 태그 분포:")
tg = Counter()
for t in flat:
    for x in (t.get("tags") or []):
        tg[x] += 1
for k, v in tg.most_common(20):
    print(f"     {v:>4}  {k}")
if not tg:
    print("     ★태그가 하나도 없다 — 계층도 없고 축도 없다")

# ── ⑤ 뿌리 — 이중 접두사 span 의 실제 태그 ───────────────────
print("\n⑤ 이중 접두사 span 의 태그 원문:")
seen = set()
for s in spans:
    for t in (s.get("tags") or []):
        if t.startswith("step:step:") and t not in seen:
            seen.add(t)
            print(f"     {t}   (span 이름={s.get('name')!r})")

# ── ④ 도면 VLM · 참조 검증 span 에 metadata 가 붙었나 ────────
print("\n④ 도면·참조 계열 span 의 metadata 유무:")
for s in spans:
    nm = f"{s.get('name','')} {' '.join(s.get('tags') or [])}"
    if "floor_plan" in nm or "ref_image" in nm or "readback" in nm:
        md = s.get("metadata") or {}
        keys = sorted(md.keys())[:6]
        print(f"     {s.get('name')!r:46} md={len(md)}칸 {keys}")
