#pragma warning disable CS1591
using System;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Providers;
namespace MediaBrowser.Controller.Subtitles
{
    public interface ISubtitleManager
    {
        /// 
        /// Occurs when [subtitle download failure].
        /// 
        event EventHandler SubtitleDownloadFailure;
        /// 
        /// Searches the subtitles.
        /// 
        /// The video.
        /// Subtitle language.
        /// Require perfect match.
        /// Request is automated.
        /// CancellationToken to use for the operation.
        /// Subtitles, wrapped in task.
        Task SearchSubtitles(
            Video video,
            string language,
            bool? isPerfectMatch,
            bool isAutomated,
            CancellationToken cancellationToken);
        /// 
        /// Searches the subtitles.
        /// 
        /// The request.
        /// The cancellation token.
        /// Task{RemoteSubtitleInfo[]}.
        Task SearchSubtitles(
            SubtitleSearchRequest request,
            CancellationToken cancellationToken);
        /// 
        /// Downloads the subtitles.
        /// 
        /// The video.
        /// Subtitle ID.
        /// CancellationToken to use for the operation.
        /// A task.
        Task DownloadSubtitles(Video video, string subtitleId, CancellationToken cancellationToken);
        /// 
        /// Downloads the subtitles.
        /// 
        /// The video.
        /// Library options to use.
        /// Subtitle ID.
        /// CancellationToken to use for the operation.
        /// A task.
        Task DownloadSubtitles(Video video, LibraryOptions libraryOptions, string subtitleId, CancellationToken cancellationToken);
        /// 
        /// Upload new subtitle.
        /// 
        /// The video the subtitle belongs to.
        /// The subtitle response.
        /// A  representing the asynchronous operation.
        Task UploadSubtitle(Video video, SubtitleResponse response);
        /// 
        /// Gets the remote subtitles.
        /// 
        /// The identifier.
        /// The cancellation token.
        /// .
        Task GetRemoteSubtitles(string id, CancellationToken cancellationToken);
        /// 
        /// Deletes the subtitles.
        /// 
        /// Media item.
        /// Subtitle index.
        /// A task.
        Task DeleteSubtitles(BaseItem item, int index);
        /// 
        /// Gets the providers.
        /// 
        /// The media item.
        /// Subtitles providers.
        SubtitleProviderInfo[] GetSupportedProviders(BaseItem item);
    }
}