"""각 guide target 샷의 실제 staging → pose_brief 추적 (포즈가 실샷 기반임 증명)."""
import json
import os
import sys

_BACKEND = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "backend"))
os.chdir(_BACKEND)
sys.path.insert(0, _BACKEND)

PID = "7f325c39-7478-4386-a562-27daadd44353"
EID = "fbf15266-989c-4cc8-8d82-699ea5f628aa"
TARGETS = [(5, 12), (29, 10), (14, 5), (21, 6)]


def main():
    from app.core.config import settings
    from app.modules.pipeline.indoor_shared_pose_plan import build_pose_brief
    from app.services.scene_checkpoint_loaders import load_shot_staging_map

    staging_map = load_shot_staging_map(settings.projects_dir, PID, EID)
    for si, shi in TARGETS:
        st = staging_map.get(f"{si}_{shi}") or {}
        print("=" * 70)
        print(f"SHOT {si}_{shi}  (실제 shot_staging 원본)")
        print("  framing_scale:", st.get("framing_scale"))
        print("  camera_direction:", (st.get("camera_direction") or "")[:160])
        fsc = st.get("frame_spatial_contract")
        if isinstance(fsc, dict):
            print("  frame_spatial_contract.reason:", fsc.get("reason"))
            for c in (fsc.get("constraints") or []):
                print("    constraint:", json.dumps(c, ensure_ascii=False))
        else:
            print("  frame_spatial_contract:", fsc)
        for a in (st.get("character_angles") or []):
            print("    character_angle:", json.dumps(a, ensure_ascii=False))
        print("  ↓ build_pose_brief (이름/ID 제거, generic 변환 — guide 프롬프트 입력):")
        brief = build_pose_brief(st)
        for f in brief.get("figures") or []:
            print("    figure:", json.dumps(f, ensure_ascii=False))
        print("    support_clause:", brief.get("support_clause"))
        print("    framing:", brief.get("framing"), "| contact_locked:", brief.get("contact_locked"))


if __name__ == "__main__":
    main()
