"""floor_plan_prompt 팩 selector 결정론 테스트.

v11 (2026-07-17 E2E7 실측 결함): 다중 벽/분리 위치 요소를 마커 1개로
저작 → 렌더가 물리 위치마다 마커 복제 → exactly-once 계약 파괴
(fp_l14 마커 6·7/12 중복 4연속). 저작 완성도는 육안/E2E — 여기는
selector 등록·계약 문구 실재·v10 불변만 잠근다.
"""
# ── v11 (2026-07-17 E2E7 실측): 단일 연속 위치 계약 ──────────────────────


def test_v11_pack_registered_and_has_contiguous_contract():
    from pathlib import Path

    from app.modules.pipeline.floor_plan_prompt import (
        PROMPT_VERSION_MAP,
        resolve_prompt_version,
    )

    assert resolve_prompt_version("11") == PROMPT_VERSION_MAP["11"]
    repo = Path(__file__).resolve().parents[3]
    text = (repo / "prompts" / "_base" / "floor_plan_prompt"
            / PROMPT_VERSION_MAP["11"] / "system.md").read_text(
        encoding="utf-8")
    n = " ".join(text.split())
    assert "Single-contiguous-spot contract" in n
    assert "Split such elements into separate" in n
    # 시나리오 중립 (범용 규칙 — 특정 방/장소 어휘 금지)
    for word in ("탐정", "detective office", "rooftop", "안방"):
        assert word not in n


def test_v10_pack_unchanged_by_v11():
    """v11 은 신규 디렉토리 — v10 팩 byte 불변 (덮어쓰기 금지 원칙)."""
    from pathlib import Path

    from app.modules.pipeline.floor_plan_prompt import PROMPT_VERSION_MAP

    repo = Path(__file__).resolve().parents[3]
    v10 = (repo / "prompts" / "_base" / "floor_plan_prompt"
           / PROMPT_VERSION_MAP["10"] / "system.md").read_text(
        encoding="utf-8")
    assert "Single-contiguous-spot contract" not in v10


def test_v11_registered_in_compat_sot():
    """W21B-w5 배선 함정 회귀 잠금 — 새 v6-호환 팩은 fp_prompt_compat
    한 곳 갱신 의무 (누락 시 dossier/readback 이 not_applicable 로
    조용히 빈 산출, E2E7 실측 재현)."""
    from app.core.fp_prompt_compat import (
        SCALE_GUIDELINE_FP_PROMPT_VERSIONS,
        V6_COMPATIBLE_FP_PROMPT_VERSIONS,
    )

    assert "11" in V6_COMPATIBLE_FP_PROMPT_VERSIONS
    assert "11" in SCALE_GUIDELINE_FP_PROMPT_VERSIONS


def test_v11_schema_byte_identical_to_v10():
    from pathlib import Path

    from app.modules.pipeline.floor_plan_prompt import PROMPT_VERSION_MAP

    repo = Path(__file__).resolve().parents[3]
    base = repo / "prompts" / "_base" / "floor_plan_prompt"
    s10 = (base / PROMPT_VERSION_MAP["10"] / "schema.json").read_bytes()
    s11 = (base / PROMPT_VERSION_MAP["11"] / "schema.json").read_bytes()
    assert s10 == s11
