from pathlib import Path

from recoil.core.ref_types import RefAsset, ReferenceBundle


def test_view_path_named_views():
    hero = RefAsset(path=Path("/refs/jade-hero.png"), role="identity", subject="jade", kind="identity", is_hero=True)
    front = RefAsset(path=Path("/refs/jade-front.png"), role="identity", subject="jade", kind="turn", view="front")
    profile = RefAsset(path=Path("/refs/jade-profile.png"), role="identity", subject="jade", kind="turn", view="profile")
    back = RefAsset(path=Path("/refs/jade-back.png"), role="identity", subject="jade", kind="turn", view="back")
    threequarter = RefAsset(
        path=Path("/refs/jade-threequarter.png"),
        role="identity",
        subject="jade",
        kind="turn",
        view="threequarter",
    )
    bundle = ReferenceBundle((hero, front, profile, back, threequarter))

    assert bundle.view_path("hero") == hero.path
    assert bundle.view_path("front") == front.path
    assert bundle.view_path("profile") == profile.path
    assert bundle.view_path("back") == back.path
    assert bundle.view_path("threequarter") == threequarter.path


def test_view_path_kind_fallback():
    fullbody = RefAsset(
        path=Path("/refs/jade-fullbody.png"),
        role="identity",
        subject="jade",
        kind="fullbody",
        view=None,
    )
    bundle = ReferenceBundle((fullbody,))

    assert bundle.view_path("fullbody") == fullbody.path


def test_view_path_first_match_wins():
    first = RefAsset(path=Path("/refs/jade-front-1.png"), role="identity", subject="jade", kind="turn", view="front")
    second = RefAsset(path=Path("/refs/jade-front-2.png"), role="identity", subject="jade", kind="turn", view="front")
    bundle = ReferenceBundle((first, second))

    assert bundle.view_path("front") == first.path


def test_view_path_missing_returns_none():
    bundle = ReferenceBundle(())

    assert bundle.view_path("front") is None
