using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Lyrics;
using MediaBrowser.Model.Providers;
namespace MediaBrowser.Controller.Lyrics;
///
/// Interface ILyricManager.
///
public interface ILyricManager
{
///
/// Occurs when a lyric download fails.
///
event EventHandler LyricDownloadFailure;
///
/// Search for lyrics for the specified song.
///
/// The song.
/// Whether the request is automated.
/// CancellationToken to use for the operation.
/// The list of lyrics.
Task> SearchLyricsAsync(
Audio audio,
bool isAutomated,
CancellationToken cancellationToken);
///
/// Search for lyrics.
///
/// The search request.
/// CancellationToken to use for the operation.
/// The list of lyrics.
Task> SearchLyricsAsync(
LyricSearchRequest request,
CancellationToken cancellationToken);
///
/// Download the lyrics.
///
/// The audio.
/// The remote lyric id.
/// CancellationToken to use for the operation.
/// The downloaded lyrics.
Task DownloadLyricsAsync(
Audio audio,
string lyricId,
CancellationToken cancellationToken);
///
/// Download the lyrics.
///
/// The audio.
/// The library options to use.
/// The remote lyric id.
/// CancellationToken to use for the operation.
/// The downloaded lyrics.
Task DownloadLyricsAsync(
Audio audio,
LibraryOptions libraryOptions,
string lyricId,
CancellationToken cancellationToken);
///
/// Saves new lyrics.
///
/// The audio file the lyrics belong to.
/// The lyrics format.
/// The lyrics.
/// A representing the asynchronous operation.
Task SaveLyricAsync(Audio audio, string format, string lyrics);
///
/// Saves new lyrics.
///
/// The audio file the lyrics belong to.
/// The lyrics format.
/// The lyrics.
/// A representing the asynchronous operation.
Task SaveLyricAsync(Audio audio, string format, Stream lyrics);
///
/// Get the remote lyrics.
///
/// The remote lyrics id.
/// CancellationToken to use for the operation.
/// The lyric response.
Task GetRemoteLyricsAsync(string id, CancellationToken cancellationToken);
///
/// Deletes the lyrics.
///
/// The audio file to remove lyrics from.
/// A representing the asynchronous operation.
Task DeleteLyricsAsync(Audio audio);
///
/// Get the list of lyric providers.
///
/// The item.
/// Lyric providers.
IReadOnlyList GetSupportedProviders(BaseItem item);
///
/// Get the existing lyric for the audio.
///
/// The audio item.
/// The cancellation token.
/// The parsed lyric model.
Task GetLyricsAsync(Audio audio, CancellationToken cancellationToken);
}