"""변환의 직접 입력이 원본 롤인지 수리본인지 밝혀 적는다.

★파일 이름으로는 못 가른다: _critique_and_fix 는 원본이든 수리본이든 승자를
언제나 canonical _sel 에 복사하므로 cine 의 source_file 은 항상 _sel.png 다
(cine_transform.py:164). fix_stage_won 이 승패를 말한다.

★자산 id 로 잇지는 않는다 — 롤은 자산이 아니다(Task 7-B 가 capture 를 껐다).
없는 것을 지어내지 않는다.
"""
from app.services.still_recipe_service import describe_cine_source


def test_original_roll_won():
    assert describe_cine_source(
        source_file="S12sh3_sel.png", selected="B", fix_won=False,
    ) == {"stage": "roll", "roll_label": "B",
          "unresolved_reason": "roll_not_registered_as_asset"}


def test_fix_won():
    """★첫 판의 결함이 여기다 — _sel.png 라고 롤로 이으면 거짓 계보다."""
    assert describe_cine_source(
        source_file="S12sh3_sel.png", selected="B", fix_won=True,
    ) == {"stage": "fix", "roll_label": None,
          "unresolved_reason": "fix_output_not_registered_as_asset"}


def test_missing_selected_is_not_guessed():
    d = describe_cine_source(
        source_file="S12sh3_sel.png", selected=None, fix_won=False)
    assert d["stage"] == "roll"
    assert d["roll_label"] is None


def test_non_sel_source_is_out_of_scope():
    """cine 이 sel 이 아닌 것을 봤다면 이 함수의 전제 밖이다."""
    assert describe_cine_source(
        source_file="S12sh3_cine.png", selected="B", fix_won=False) == {}


def test_empty_source_is_tolerated():
    assert describe_cine_source(source_file="", selected="B",
                                fix_won=False) == {}
