"""Wave5 targeted outdoor shared-model 발동 검증 드라이버 (커밋 금지).

기존 7f325c39/fbf15266 에 outdoor flag ON 으로 OutdoorSiteLayoutStep 을 직접
실행 → cross-shot candidate 그룹 발동 여부 + judge route + shared-model guide
생성 여부를 저렴하게 확인(dormant=데이터의존 확인, 발동=캔버스 육안).
"""
import json
import os
import sys

# ★ outdoor flag ON — app import 전 설정.
os.environ["OUTDOOR_SITE_LAYOUT_ENABLED"] = "true"
os.environ["OUTDOOR_COMPOSITION_GUIDE_ENABLED"] = "true"
os.environ["OUTDOOR_COMPOSITION_GUIDE_SHARED_MODEL_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
    print("flags: site_layout=%s composition=%s shared_model=%s judge=%s" % (
        settings.outdoor_site_layout_enabled,
        settings.outdoor_composition_guide_enabled,
        settings.outdoor_composition_guide_shared_model_enabled,
        getattr(settings, "outdoor_shared_model_guide_judge_enabled", None)))

    from app.core.database import SessionLocal
    from app.core.steps.outdoor_site_layout_step import OutdoorSiteLayoutStep

    db = SessionLocal()
    try:
        step = OutdoorSiteLayoutStep("outdoor_site_layout", PID, EID, db)
        result = step.run(mode="force")
        print("\n=== STEP RESULT ===")
        print("status:", result.get("status"))
        data = result.get("data") or {}
        diags = data.get("diagnostics") or result.get("diagnostics") or {}
        # 핵심 신호만 추려 출력.
        for k in ("enabled", "shared_model_enabled", "locations_processed",
                  "shared_model_candidate_signals", "shared_model_guides",
                  "composition_guides"):
            v = diags.get(k) if isinstance(diags, dict) else None
            if v is None:
                v = data.get(k)
            if isinstance(v, (dict, list)):
                print(f"{k}: {json.dumps(v, ensure_ascii=False)[:1200]}")
            else:
                print(f"{k}: {v}")
        # 전체 diagnostics keys 노출(놓친 신호 확인).
        if isinstance(diags, dict):
            print("diag keys:", sorted(diags.keys()))
        cg = data.get("composition_guides") or {}
        print(f"composition_guides count: {len(cg)}")
    finally:
        db.close()


if __name__ == "__main__":
    main()
