from api.v1.schemas.common import LastFmTagSchema
from models.album import AlbumInfo as AlbumInfo
from models.album import Track as Track
from infrastructure.msgspec_fastapi import AppStruct


class AlbumBasicInfo(AppStruct):
    """Minimal album info for fast initial load - no tracks."""
    title: str
    musicbrainz_id: str
    artist_name: str
    artist_id: str
    release_date: str | None = None
    year: int | None = None
    type: str | None = None
    disambiguation: str | None = None
    in_library: bool = False
    requested: bool = False
    cover_url: str | None = None
    album_thumb_url: str | None = None


class AlbumTracksInfo(AppStruct):
    """Track list and extended details - loaded asynchronously."""
    tracks: list[Track] = []
    total_tracks: int = 0
    total_length: int | None = None
    label: str | None = None
    barcode: str | None = None
    country: str | None = None


class LastFmAlbumEnrichment(AppStruct):
    summary: str | None = None
    tags: list[LastFmTagSchema] = []
    listeners: int = 0
    playcount: int = 0
    url: str | None = None
