using System;
using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay
{
    /// 
    /// Interface ISyncPlayController.
    /// 
    public interface ISyncPlayController
    {
        /// 
        /// Gets the group id.
        /// 
        /// The group id.
        Guid GetGroupId();
        /// 
        /// Gets the playing item id.
        /// 
        /// The playing item id.
        Guid GetPlayingItemId();
        /// 
        /// Checks if the group is empty.
        /// 
        /// If the group is empty.
        bool IsGroupEmpty();
        /// 
        /// Initializes the group with the session's info.
        /// 
        /// The session.
        /// The cancellation token.
        void CreateGroup(SessionInfo session, CancellationToken cancellationToken);
        /// 
        /// Adds the session to the group.
        /// 
        /// The session.
        /// The request.
        /// The cancellation token.
        void SessionJoin(SessionInfo session, JoinGroupRequest request, CancellationToken cancellationToken);
        /// 
        /// Removes the session from the group.
        /// 
        /// The session.
        /// The cancellation token.
        void SessionLeave(SessionInfo session, CancellationToken cancellationToken);
        /// 
        /// Handles the requested action by the session.
        /// 
        /// The session.
        /// The requested action.
        /// The cancellation token.
        void HandleRequest(SessionInfo session, PlaybackRequest request, CancellationToken cancellationToken);
        /// 
        /// Gets the info about the group for the clients.
        /// 
        /// The group info for the clients.
        GroupInfoView GetInfo();
    }
}