using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Connect;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Connect
{
    public interface IConnectManager
    {
        /// 
        /// Gets the wan API address.
        /// 
        /// The wan API address.
        string WanApiAddress { get; }
        /// 
        /// Links the user.
        /// 
        /// The user identifier.
        /// The connect username.
        /// Task.
        Task LinkUser(string userId, string connectUsername);
        /// 
        /// Removes the link.
        /// 
        /// The user identifier.
        /// Task.
        Task RemoveConnect(string userId);
        /// 
        /// Invites the user.
        /// 
        /// The request.
        /// Task<UserLinkResult>.
        Task InviteUser(ConnectAuthorizationRequest request);
        /// 
        /// Gets the pending guests.
        /// 
        /// Task<List<ConnectAuthorization>>.
        Task> GetPendingGuests();
        /// 
        /// Gets the user from exchange token.
        /// 
        /// The token.
        /// User.
        User GetUserFromExchangeToken(string token);
        /// 
        /// Cancels the authorization.
        /// 
        /// The identifier.
        /// Task.
        Task CancelAuthorization(string id);
        /// 
        /// Authenticates the specified username.
        /// 
        /// The username.
        /// The password MD5.
        /// Task.
        Task Authenticate(string username, string passwordMd5);
        /// 
        /// Gets the local user.
        /// 
        /// The connect user identifier.
        /// Task<User>.
        Task GetLocalUser(string connectUserId);
        /// 
        /// Determines whether [is authorization token valid] [the specified token].
        /// 
        /// The token.
        /// true if [is authorization token valid] [the specified token]; otherwise, false.
        bool IsAuthorizationTokenValid(string token);
    }
}