"""judge payload 덤프 (API 0) — judge 가 indoor 그룹을 왜 deny 하는지 진단."""
import json
import os
import sys

os.environ["INDOOR_SHARED_POSE_GUIDE_ENABLED"] = "true"
os.environ["INDOOR_SHARED_POSE_GUIDE_JUDGE_ENABLED"] = "true"
_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"


def main():
    from app.core.config import settings
    from app.core.database import SessionLocal
    from app.core.steps.indoor_shared_pose_guide_context import (
        _judge_payload, _load_bg_loc_by_id, _load_indoor_outdoor_locs,
    )
    from app.modules.pipeline.indoor_shared_pose_plan import (
        candidate_groups, filter_indoor_groups,
    )
    from app.services.scene_checkpoint_loaders import (
        load_background_chain_bg_map, load_shot_staging_map,
    )
    from app.services.scene_persistence_service import ScenePersistenceService

    db = SessionLocal()
    persistence = ScenePersistenceService(db, PID)
    stills, _ = persistence.load_episode_still_dicts(EID)
    staging_map = load_shot_staging_map(settings.projects_dir, PID, EID)
    bgmap = load_background_chain_bg_map(settings.projects_dir, PID, EID)
    bg_loc = _load_bg_loc_by_id(settings.projects_dir, PID, EID)
    indoor_locs, outdoor_locs = _load_indoor_outdoor_locs(settings.projects_dir, PID, EID)
    db.close()

    selected, bg_id_by_shot, shot_by_key = [], {}, {}
    for s in stills:
        si, shi = s.get("scene_index"), s.get("shot_index")
        if not isinstance(si, int) or not isinstance(shi, int):
            continue
        k = (si, shi)
        selected.append(k)
        bg_id_by_shot[k] = str((bgmap.get(f"{si}_{shi}") or {}).get("bg_id") or "")
        shot_by_key[k] = staging_map.get(f"{si}_{shi}") or {}

    cands = candidate_groups(selected_keys=selected, bg_id_by_shot=bg_id_by_shot,
                             shot_by_key=shot_by_key, zoom_member_keys=set())
    kept, _ = filter_indoor_groups(cands, bg_loc_by_id=bg_loc,
                                   indoor_locs=indoor_locs, outdoor_locs=outdoor_locs)
    print(f"indoor kept groups: {len(kept)}")
    for cand in kept:
        payload = _judge_payload(cand, shot_by_key)
        print("\n=== group", payload["scene_index"], cand["bg_id"], "===")
        print("group_signals:", payload["group_signals"])
        for sh in payload["shots"]:
            print(f"  {sh['shot_key']}: framing={sh['framing']} figures={sh['figure_count']} "
                  f"contact_locked={sh['contact_locked']} signals={sh['signals']}")


if __name__ == "__main__":
    main()
