using System.Threading.Tasks;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Providers
{
    public interface IImageEnhancer
    {
        /// 
        /// Return true only if the given image for the given item will be enhanced by this enhancer.
        /// 
        /// The item.
        /// Type of the image.
        /// true if this enhancer will enhance the supplied image for the supplied item, false otherwise
        bool Supports(BaseItem item, ImageType imageType);
        /// 
        /// Gets the priority or order in which this enhancer should be run.
        /// 
        /// The priority.
        MetadataProviderPriority Priority { get; }
        /// 
        /// Return a key incorporating all configuration information related to this item
        /// 
        /// The item.
        /// Type of the image.
        /// Cache key relating to the current state of this item and configuration
        string GetConfigurationCacheKey(BaseItem item, ImageType imageType);
        /// 
        /// Gets the size of the enhanced image.
        /// 
        /// The item.
        /// Type of the image.
        /// Index of the image.
        /// Size of the original image.
        /// ImageSize.
        ImageDimensions GetEnhancedImageSize(BaseItem item, ImageType imageType, int imageIndex, ImageDimensions originalImageSize);
        EnhancedImageInfo GetEnhancedImageInfo(BaseItem item, string inputFile, ImageType imageType, int imageIndex);
        /// 
        /// Enhances the image async.
        /// 
        /// The item.
        /// The input file.
        /// The output file.
        /// Type of the image.
        /// Index of the image.
        /// Task{Image}.
        /// 
        Task EnhanceImageAsync(BaseItem item, string inputFile, string outputFile, ImageType imageType, int imageIndex);
    }
    public class EnhancedImageInfo
    {
        public bool RequiresTransparency { get; set; }
    }
}