using System;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Channels;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Querying;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Channels
{
    public interface IChannelManager
    {
        /// 
        /// Adds the parts.
        /// 
        /// The channels.
        void AddParts(IEnumerable channels);
        /// 
        /// Gets the channel features.
        /// 
        /// The identifier.
        /// ChannelFeatures.
        ChannelFeatures GetChannelFeatures(string id);
        bool SupportsSync(string channelId);
        /// 
        /// Gets all channel features.
        /// 
        /// IEnumerable{ChannelFeatures}.
        IEnumerable GetAllChannelFeatures();
        /// 
        /// Gets the channel.
        /// 
        /// The identifier.
        /// Channel.
        Channel GetChannel(string id);
        /// 
        /// Gets the channels internal.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task<QueryResult<Channel>>.
        Task> GetChannelsInternal(ChannelQuery query, CancellationToken cancellationToken);
        /// 
        /// Gets the channels.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{BaseItemDto}}.
        Task> GetChannels(ChannelQuery query, CancellationToken cancellationToken);
        /// 
        /// Gets all media internal.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task<QueryResult<BaseItem>>.
        Task> GetAllMediaInternal(AllChannelMediaQuery query, CancellationToken cancellationToken);
        
        /// 
        /// Gets all media.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{BaseItemDto}}.
        Task> GetAllMedia(AllChannelMediaQuery query, CancellationToken cancellationToken);
        /// 
        /// Gets the latest media.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{BaseItemDto}}.
        Task> GetLatestChannelItems(AllChannelMediaQuery query, CancellationToken cancellationToken);
        /// 
        /// Gets the latest channel items internal.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task<QueryResult<BaseItem>>.
        Task> GetLatestChannelItemsInternal(AllChannelMediaQuery query, CancellationToken cancellationToken);
        
        /// 
        /// Gets the channel items.
        /// 
        /// The query.
        /// The cancellation token.
        /// Task{QueryResult{BaseItemDto}}.
        Task> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken);
        /// 
        /// Gets the channel items internal.
        /// 
        /// The query.
        /// The progress.
        /// The cancellation token.
        /// Task<QueryResult<BaseItem>>.
        Task> GetChannelItemsInternal(ChannelItemQuery query, IProgress progress, CancellationToken cancellationToken);
        /// 
        /// Gets the channel item media sources.
        /// 
        /// The item.
        /// The cancellation token.
        /// Task{IEnumerable{MediaSourceInfo}}.
        Task> GetStaticMediaSources(BaseItem item, CancellationToken cancellationToken);
        /// 
        /// Gets the channel folder.
        /// 
        /// The cancellation token.
        /// BaseItemDto.
        Task GetInternalChannelFolder(CancellationToken cancellationToken);
        /// 
        /// Gets the channel folder.
        /// 
        /// The user identifier.
        /// The cancellation token.
        /// BaseItemDto.
        Task GetChannelFolder(string userId, CancellationToken cancellationToken);
    }
}