using octo_fiesta.Models;
namespace octo_fiesta.Services.Local;
///
/// Interface for local music library management
///
public interface ILocalLibraryService
{
///
/// Checks if an external song already exists locally
///
Task GetLocalPathForExternalSongAsync(string externalProvider, string externalId);
///
/// Registers a downloaded song in the local library
///
Task RegisterDownloadedSongAsync(Song song, string localPath);
///
/// Gets the mapping between external ID and local ID
///
Task GetLocalIdForExternalSongAsync(string externalProvider, string externalId);
///
/// Parses a song ID to determine if it is external or local
///
(bool isExternal, string? provider, string? externalId) ParseSongId(string songId);
///
/// Parses an external ID to extract the provider, type and ID
/// Format: ext-{provider}-{type}-{id} (e.g., ext-deezer-artist-259, ext-deezer-album-96126, ext-deezer-song-12345)
/// Also supports legacy format: ext-{provider}-{id} (assumes song type)
///
(bool isExternal, string? provider, string? type, string? externalId) ParseExternalId(string id);
///
/// Triggers a Subsonic library scan
///
Task TriggerLibraryScanAsync();
///
/// Gets the current scan status
///
Task GetScanStatusAsync();
}