"""Schemas for searching external (fetch) sources — the §A4 discover screen."""

from pydantic import BaseModel

from app.domain.sources import SearchResult


class ExternalSearchResultOut(BaseModel):
    source: str
    source_id: str
    title: str
    artist: str | None
    album: str | None
    duration_seconds: int | None
    thumbnail_url: str | None

    @classmethod
    def from_entity(cls, r: SearchResult) -> ExternalSearchResultOut:
        return cls(
            source=r.source,
            source_id=r.source_id,
            title=r.title,
            artist=r.artist,
            album=r.album,
            duration_seconds=r.duration_seconds,
            thumbnail_url=r.thumbnail_url,
        )


class ExternalSearchResponse(BaseModel):
    """Flat list of hits across one or more searchable sources, plus the names of
    sources that were unavailable (so the UI can show a soft warning)."""

    results: list[ExternalSearchResultOut]
    searched_sources: list[str]
