using octo_fiesta.Models.Domain;
using octo_fiesta.Models.Settings;
using octo_fiesta.Models.Download;
using octo_fiesta.Models.Search;
using octo_fiesta.Models.Subsonic;
namespace octo_fiesta.Services;
///
/// Interface for external music metadata search service
/// (Deezer API, Spotify API, MusicBrainz, etc.)
///
public interface IMusicMetadataService
{
///
/// Searches for songs on external providers
///
/// Search term
/// Maximum number of results
/// List of found songs
Task> SearchSongsAsync(string query, int limit = 20);
///
/// Searches for albums on external providers
///
Task> SearchAlbumsAsync(string query, int limit = 20);
///
/// Searches for artists on external providers
///
Task> SearchArtistsAsync(string query, int limit = 20);
///
/// Combined search (songs, albums, artists)
///
Task SearchAllAsync(string query, int songLimit = 20, int albumLimit = 20, int artistLimit = 20);
///
/// Gets details of an external song
///
Task GetSongAsync(string externalProvider, string externalId);
///
/// Gets details of an external album with its songs
///
Task GetAlbumAsync(string externalProvider, string externalId);
///
/// Gets details of an external artist
///
Task GetArtistAsync(string externalProvider, string externalId);
///
/// Gets an artist's albums
///
Task> GetArtistAlbumsAsync(string externalProvider, string externalId);
///
/// Searches for playlists on external providers
///
/// Search term
/// Maximum number of results
/// List of found playlists
Task> SearchPlaylistsAsync(string query, int limit = 20);
///
/// Gets details of an external playlist (metadata only, not tracks)
///
/// Provider name (e.g., "deezer", "qobuz")
/// Playlist ID from the provider
/// Playlist details or null if not found
Task GetPlaylistAsync(string externalProvider, string externalId);
///
/// Gets all tracks from an external playlist
///
/// Provider name (e.g., "deezer", "qobuz")
/// Playlist ID from the provider
/// List of songs in the playlist
Task> GetPlaylistTracksAsync(string externalProvider, string externalId);
}