package cy.hexor.furumi.domain.model

data class ArtistCard(
    val id: Long,
    val name: String,
    val imageUrl: String?,
    val releaseCount: Int,
    val trackCount: Int
)

data class ArtistRef(
    val id: Long,
    val name: String
)

data class ArtistPage(
    val items: List<ArtistCard>,
    val total: Long,
    val page: Int,
    val perPage: Int,
    val hasMore: Boolean
)

data class ReleaseCard(
    val id: Long,
    val title: String,
    val releaseType: String?,
    val year: Int?,
    val coverUrl: String?,
    val trackCount: Int
)

data class TrackCard(
    val id: Long,
    val title: String,
    val trackNumber: Int?,
    val discNumber: Int?,
    val durationSeconds: Int?,
    val artists: List<String>,
    val artistRefs: List<ArtistRef> = emptyList(),
    val featuredArtistRefs: List<ArtistRef> = emptyList(),
    val releaseId: Long? = null,
    val releaseYear: Int? = null,
    val releaseTitle: String?,
    val coverUrl: String?,
    val streamUrl: String,
    val remoteCoverUrl: String? = coverUrl,
    val remoteStreamUrl: String = streamUrl,
    val metadataUpdatedAt: String? = null,
    val audioHash: String? = null,
    val audioSizeBytes: Long? = null,
    val audioMimeType: String? = null,
    val audioUpdatedAt: String? = null,
    val coverHash: String? = null,
    val coverUpdatedAt: String? = null,
    val localAudioPath: String? = null,
    val localCoverPath: String? = null,
    val isAudioCached: Boolean = false
)

data class ArtistDetail(
    val artist: ArtistCard,
    val releases: List<ReleaseCard>,
    val topTracks: List<TrackCard>,
    val featuredTracks: List<TrackCard>
)

data class ReleaseDetail(
    val release: ReleaseCard,
    val artists: List<ArtistCard>,
    val tracks: List<TrackCard>
)

data class PlaylistCard(
    val id: Long,
    val title: String,
    val trackCount: Int,
    val isPublic: Boolean,
    val isOwn: Boolean = false,
    val ownerName: String? = null,
    val isSaved: Boolean = false,
    val kind: String? = null
)

data class PlaylistDetail(
    val playlist: PlaylistCard,
    val description: String?,
    val tracks: List<TrackCard>
)

data class SearchResults(
    val artistMatches: List<ArtistCard>,
    val trackArtists: List<ArtistCard>,
    val tracks: List<TrackCard>
)
