using System;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.MediaInfo
{
    /// 
    /// Interface IMediaEncoder
    /// 
    public interface IMediaEncoder
    {
        /// 
        /// Gets the encoder path.
        /// 
        /// The encoder path.
        string EncoderPath { get; }
        /// 
        /// Gets the version.
        /// 
        /// The version.
        string Version { get; }
        /// 
        /// Extracts the image.
        /// 
        /// The input files.
        /// The type.
        /// if set to true [is audio].
        /// The threed format.
        /// The offset.
        /// The output path.
        /// The cancellation token.
        /// Task.
        Task ExtractImage(string[] inputFiles, InputType type, bool isAudio, Video3DFormat? threedFormat, TimeSpan? offset, string outputPath, CancellationToken cancellationToken);
        /// 
        /// Extracts the text subtitle.
        /// 
        /// The input files.
        /// The type.
        /// Index of the subtitle stream.
        /// The output path.
        /// The cancellation token.
        /// Task.
        Task ExtractTextSubtitle(string[] inputFiles, InputType type, int subtitleStreamIndex, string outputPath, CancellationToken cancellationToken);
        /// 
        /// Converts the text subtitle to ass.
        /// 
        /// The input path.
        /// The output path.
        /// The language.
        /// The cancellation token.
        /// Task.
        Task ConvertTextSubtitleToAss(string inputPath, string outputPath, string language, CancellationToken cancellationToken);
        /// 
        /// Gets the media info.
        /// 
        /// The input files.
        /// The type.
        /// if set to true [is audio].
        /// The cancellation token.
        /// Task.
        Task GetMediaInfo(string[] inputFiles, InputType type, bool isAudio, CancellationToken cancellationToken);
        /// 
        /// Gets the probe size argument.
        /// 
        /// The type.
        /// System.String.
        string GetProbeSizeArgument(InputType type);
        /// 
        /// Gets the input argument.
        /// 
        /// The input files.
        /// The type.
        /// System.String.
        string GetInputArgument(string[] inputFiles, InputType type);
    }
    /// 
    /// Enum InputType
    /// 
    public enum InputType
    {
        /// 
        /// The file
        /// 
        File,
        /// 
        /// The bluray
        /// 
        Bluray,
        /// 
        /// The DVD
        /// 
        Dvd,
        /// 
        /// The URL
        /// 
        Url
    }
}