using System.Collections.Generic;
using MediaBrowser.Controller.Entities;
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Providers
{
    public interface IProviderManager : IDisposable
    {
        /// 
        /// Downloads the and save image.
        /// 
        /// The item.
        /// The source.
        /// Name of the target.
        /// The resource pool.
        /// The cancellation token.
        /// Task{System.String}.
        /// item
        Task DownloadAndSaveImage(BaseItem item, string source, string targetName, SemaphoreSlim resourcePool, CancellationToken cancellationToken);
        /// 
        /// Saves to library filesystem.
        /// 
        /// The item.
        /// The path.
        /// The data to save.
        /// The cancellation token.
        /// Task.
        /// 
        Task SaveToLibraryFilesystem(BaseItem item, string path, Stream dataToSave, CancellationToken cancellationToken);
        /// 
        /// Executes the metadata providers.
        /// 
        /// The item.
        /// The cancellation token.
        /// if set to true [force].
        /// if set to true [allow slow providers].
        /// Task{System.Boolean}.
        Task ExecuteMetadataProviders(BaseItem item, CancellationToken cancellationToken, bool force = false, bool allowSlowProviders = true);
        /// 
        /// Adds the metadata providers.
        /// 
        /// The providers.
        void AddMetadataProviders(IEnumerable providers);
    }
}