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);
}