"""item_id map builder — AC-A6 (V3 patch I1)."""
from app.modules.pipeline.t2i_review import _build_item_id_map


def test_build_item_id_map_basic():
    scene_detail = {
        "scenes": [
            {"scene_index": 1, "t2i_variations": [{"t2i_prompt": "a"}, {"t2i_prompt": "b"}]},
            {"scene_index": 2, "t2i_variations": [{"t2i_prompt": "c"}]},
        ]
    }
    m = _build_item_id_map(scene_detail)
    # format: f"S{scene_index}_L{scene_list_idx}_V{variation_idx}"
    assert m == {
        "S1_L0_V0": (0, 0),
        "S1_L0_V1": (0, 1),
        "S2_L1_V0": (1, 0),
    }


def test_build_item_id_map_handles_fanout_same_scene_index():
    """fan-out 시나리오 — 같은 scene_index 가 여러 entry."""
    scene_detail = {
        "scenes": [
            {"scene_index": 5, "t2i_variations": [{"t2i_prompt": "a"}]},
            {"scene_index": 5, "t2i_variations": [{"t2i_prompt": "b"}]},  # 같은 scene_index, 다른 list 위치
        ]
    }
    m = _build_item_id_map(scene_detail)
    # scene_list_idx 가 다르면 item_id 도 다름 (모호 X)
    assert m == {
        "S5_L0_V0": (0, 0),
        "S5_L1_V0": (1, 0),
    }


def test_build_item_id_map_skips_scenes_without_variations():
    scene_detail = {
        "scenes": [
            {"scene_index": 1},  # t2i_variations 키 없음
            {"scene_index": 2, "t2i_variations": []},
            {"scene_index": 3, "t2i_variations": [{"t2i_prompt": "x"}]},
        ]
    }
    m = _build_item_id_map(scene_detail)
    assert m == {"S3_L2_V0": (2, 0)}
