"""Unit tests for the AcoustID response parser — pure, no network."""

from app.infrastructure.metadata.acoustid import _parse_best_match


def _payload_with_results(results: list[object]) -> dict[str, object]:
    return {"status": "ok", "results": results}


def test_parses_full_recording() -> None:
    payload = _payload_with_results(
        [
            {
                "id": "acoustid-1",
                "score": 0.97,
                "recordings": [
                    {
                        "id": "mb-rec-1",
                        "title": "One More Time",
                        "artists": [{"id": "a1", "name": "Daft Punk"}],
                        "releasegroups": [{"id": "rg1", "title": "Discovery"}],
                    }
                ],
            }
        ]
    )

    match = _parse_best_match(payload)

    assert match is not None
    assert match.acoustid == "acoustid-1"
    assert match.recording_mbid == "mb-rec-1"
    assert match.title == "One More Time"
    assert match.artist == "Daft Punk"
    assert match.album == "Discovery"
    assert match.release_group_mbid == "rg1"
    assert match.score == 0.97


def test_picks_highest_score() -> None:
    payload = _payload_with_results(
        [
            {"id": "low", "score": 0.40, "recordings": [{"id": "r-low", "title": "Low"}]},
            {"id": "high", "score": 0.92, "recordings": [{"id": "r-high", "title": "High"}]},
        ]
    )

    match = _parse_best_match(payload)

    assert match is not None
    assert match.acoustid == "high"
    assert match.title == "High"


def test_result_without_recordings_still_returns_id() -> None:
    payload = _payload_with_results([{"id": "acoustid-only", "score": 0.5}])

    match = _parse_best_match(payload)

    assert match is not None
    assert match.acoustid == "acoustid-only"
    assert match.recording_mbid is None
    assert match.title is None


def test_error_status_returns_none() -> None:
    assert _parse_best_match({"status": "error", "error": {"message": "bad"}}) is None


def test_empty_results_returns_none() -> None:
    assert _parse_best_match(_payload_with_results([])) is None


def test_non_dict_payload_returns_none() -> None:
    assert _parse_best_match("nonsense") is None
    assert _parse_best_match(None) is None
