namespace octo_fiesta.Models.Domain; /// /// Represents a song (local or external) /// public class Song { /// /// Unique ID. For external songs, prefixed with "ext-" + provider + "-" + external id /// Example: "ext-deezer-123456" or "local-789" /// public string Id { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string Artist { get; set; } = string.Empty; public string? ArtistId { get; set; } public string Album { get; set; } = string.Empty; public string? AlbumId { get; set; } public int? Duration { get; set; } // In seconds public int? Track { get; set; } public int? DiscNumber { get; set; } public int? TotalTracks { get; set; } public int? Year { get; set; } public string? Genre { get; set; } public string? CoverArtUrl { get; set; } /// /// High-resolution cover art URL (for embedding) /// public string? CoverArtUrlLarge { get; set; } /// /// BPM (beats per minute) if available /// public int? Bpm { get; set; } /// /// ISRC (International Standard Recording Code) /// public string? Isrc { get; set; } /// /// Full release date (format: YYYY-MM-DD) /// public string? ReleaseDate { get; set; } /// /// Album artist name (may differ from track artist) /// public string? AlbumArtist { get; set; } /// /// Composer(s) /// public string? Composer { get; set; } /// /// Album label /// public string? Label { get; set; } /// /// Copyright /// public string? Copyright { get; set; } /// /// Contributing artists (features, etc.) /// public List Contributors { get; set; } = new(); /// /// Indicates whether the song is available locally or needs to be downloaded /// public bool IsLocal { get; set; } /// /// External provider (deezer, spotify, etc.) - null if local /// public string? ExternalProvider { get; set; } /// /// ID on the external provider (for downloading) /// public string? ExternalId { get; set; } /// /// Local file path (if available) /// public string? LocalPath { get; set; } /// /// Deezer explicit content lyrics value /// 0 = Naturally clean, 1 = Explicit, 2 = Not applicable, 3 = Clean/edited version, 6/7 = Unknown /// public int? ExplicitContentLyrics { get; set; } }