"""Tests for compact taste profile construction."""

from app.domain.models import TasteProfile, Track
from app.domain.profile import compress_taste_profile


def test_profile_compression_includes_bounded_signals_and_known_ids() -> None:
    short_track = _track("short", "Quick Song", "Quick Artist")
    long_track = _track("long", "Lasting Song", "Lasting Artist")
    saved_track = _track("saved", "Saved Song", "Saved Artist")
    profile = TasteProfile(
        short_term_artists=("Current Artist",),
        long_term_artists=("Enduring Artist",),
        short_term_tracks=(short_track,),
        long_term_tracks=(long_track,),
        saved_tracks=(saved_track,),
    )

    compressed = compress_taste_profile(profile)

    assert compressed.text.splitlines() == [
        "Short-term top artists: Current Artist",
        "Long-term top artists: Enduring Artist",
        "Short-term top tracks: Quick Song by Quick Artist",
        "Long-term top tracks: Lasting Song by Lasting Artist",
        "Saved-track sample: Saved Song by Saved Artist",
    ]
    assert compressed.known_track_ids == frozenset({"short", "long", "saved"})


def test_empty_profile_sections_are_explicit() -> None:
    profile = TasteProfile((), (), (), (), ())

    assert compress_taste_profile(profile).text.count(": none") == 5


def _track(track_id: str, title: str, artist: str) -> Track:
    return Track(
        id=track_id,
        uri=f"spotify:track:{track_id}",
        title=title,
        artists=(artist,),
        album_name="Album",
        album_art_url=None,
        external_url=None,
    )
