using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Session;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Session
{
    public interface ISessionController
    {
        /// 
        /// Gets a value indicating whether [supports media remote control].
        /// 
        /// true if [supports media remote control]; otherwise, false.
        bool SupportsMediaRemoteControl { get; }
        /// 
        /// Gets a value indicating whether this instance is session active.
        /// 
        /// true if this instance is session active; otherwise, false.
        bool IsSessionActive { get; }
        /// 
        /// Sends the system command.
        /// 
        /// The command.
        /// The cancellation token.
        /// Task.
        Task SendSystemCommand(SystemCommand command, CancellationToken cancellationToken);
        /// 
        /// Sends the message command.
        /// 
        /// The command.
        /// The cancellation token.
        /// Task.
        Task SendMessageCommand(MessageCommand command, CancellationToken cancellationToken);
        /// 
        /// Sends the play command.
        /// 
        /// The command.
        /// The cancellation token.
        /// Task.
        Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken);
        /// 
        /// Sends the browse command.
        /// 
        /// The command.
        /// The cancellation token.
        /// Task.
        Task SendBrowseCommand(BrowseRequest command, CancellationToken cancellationToken);
        /// 
        /// Sends the playstate command.
        /// 
        /// The command.
        /// The cancellation token.
        /// Task.
        Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken);
        /// 
        /// Sends the library update info.
        /// 
        /// The info.
        /// The cancellation token.
        /// Task.
        Task SendLibraryUpdateInfo(LibraryUpdateInfo info, CancellationToken cancellationToken);
        /// 
        /// Sends the restart required message.
        /// 
        /// The cancellation token.
        /// Task.
        Task SendRestartRequiredNotification(CancellationToken cancellationToken);
        /// 
        /// Sends the user data change info.
        /// 
        /// The info.
        /// The cancellation token.
        /// Task.
        Task SendUserDataChangeInfo(UserDataChangeInfo info, CancellationToken cancellationToken);
        /// 
        /// Sends the server shutdown notification.
        /// 
        /// The cancellation token.
        /// Task.
        Task SendServerShutdownNotification(CancellationToken cancellationToken);
        /// 
        /// Sends the server restart notification.
        /// 
        /// The cancellation token.
        /// Task.
        Task SendServerRestartNotification(CancellationToken cancellationToken);
    }
}