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 ;
/// <summary>
/// Interface ILyricManager.
/// </summary>
public interface ILyricManager
{
/// <summary>
/// Occurs when a lyric download fails.
/// </summary>
event EventHandler < LyricDownloadFailureEventArgs > LyricDownloadFailure ;
/// <summary>
/// Search for lyrics for the specified song.
/// </summary>
/// <param name="audio">The song.</param>
/// <param name="isAutomated">Whether the request is automated.</param>
/// <param name="cancellationToken">CancellationToken to use for the operation.</param>
/// <returns>The list of lyrics.</returns>
Task < IReadOnlyList < RemoteLyricInfoDto > > SearchLyricsAsync (
Audio audio ,
bool isAutomated ,
CancellationToken cancellationToken ) ;
/// <summary>
/// Search for lyrics.
/// </summary>
/// <param name="request">The search request.</param>
/// <param name="cancellationToken">CancellationToken to use for the operation.</param>
/// <returns>The list of lyrics.</returns>
Task < IReadOnlyList < RemoteLyricInfoDto > > SearchLyricsAsync (
LyricSearchRequest request ,
CancellationToken cancellationToken ) ;
/// <summary>
/// Download the lyrics.
/// </summary>
/// <param name="audio">The audio.</param>
/// <param name="lyricId">The remote lyric id.</param>
/// <param name="cancellationToken">CancellationToken to use for the operation.</param>
/// <returns>The downloaded lyrics.</returns>
Task < LyricDto ? > DownloadLyricsAsync (
Audio audio ,
string lyricId ,
CancellationToken cancellationToken ) ;
/// <summary>
/// Download the lyrics.
/// </summary>
/// <param name="audio">The audio.</param>
/// <param name="libraryOptions">The library options to use.</param>
/// <param name="lyricId">The remote lyric id.</param>
/// <param name="cancellationToken">CancellationToken to use for the operation.</param>
/// <returns>The downloaded lyrics.</returns>
Task < LyricDto ? > DownloadLyricsAsync (
Audio audio ,
LibraryOptions libraryOptions ,
string lyricId ,
CancellationToken cancellationToken ) ;
/// <summary>
/// Saves new lyrics.
/// </summary>
/// <param name="audio">The audio file the lyrics belong to.</param>
/// <param name="format">The lyrics format.</param>
/// <param name="lyrics">The lyrics.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
Task < LyricDto ? > SaveLyricAsync ( Audio audio , string format , string lyrics ) ;
/// <summary>
/// Saves new lyrics.
/// </summary>
/// <param name="audio">The audio file the lyrics belong to.</param>
/// <param name="format">The lyrics format.</param>
/// <param name="lyrics">The lyrics.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
Task < LyricDto ? > SaveLyricAsync ( Audio audio , string format , Stream lyrics ) ;
/// <summary>
/// Get the remote lyrics.
/// </summary>
/// <param name="id">The remote lyrics id.</param>
/// <param name="cancellationToken">CancellationToken to use for the operation.</param>
/// <returns>The lyric response.</returns>
Task < LyricDto ? > GetRemoteLyricsAsync ( string id , CancellationToken cancellationToken ) ;
/// <summary>
/// Deletes the lyrics.
/// </summary>
/// <param name="audio">The audio file to remove lyrics from.</param>
/// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
Task DeleteLyricsAsync ( Audio audio ) ;
/// <summary>
/// Get the list of lyric providers.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>Lyric providers.</returns>
IReadOnlyList < LyricProviderInfo > GetSupportedProviders ( BaseItem item ) ;
/// <summary>
/// Get the existing lyric for the audio.
/// </summary>
/// <param name="audio">The audio item.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The parsed lyric model.</returns>
Task < LyricDto ? > GetLyricsAsync ( Audio audio , CancellationToken cancellationToken ) ;
}