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