using AsbCloudApp.Data.User;
using System.Security.Claims;
using System.Threading;
using System.Threading.Tasks;

namespace AsbCloudApp.Services
{
    /// <summary>
    /// Сервис авторизации
    /// </summary>
    public interface IAuthService
    {
        /// <summary>
        /// Смена пароля пользователю
        /// </summary>
        /// <param name="idUser"></param>
        /// <param name="newPassword"></param>
        /// <returns></returns>
        void ChangePassword(int idUser, string newPassword);

        /// <summary>
        /// Смена пароля пользователю
        /// </summary>
        /// <param name="userLogin"></param>
        /// <param name="newPassword"></param>
        /// <returns></returns>
        void ChangePassword(string userLogin, string newPassword);

        /// <summary>
        /// Авторизация
        /// </summary>
        /// <param name="login"></param>
        /// <param name="password"></param>
        /// <param name="token">токен отмены задачи</param>
        /// <returns></returns>
        Task<UserTokenDto?> LoginAsync(string login,
            string password, CancellationToken token = default);

        /// <summary>
        /// Обновление токена авторизации
        /// </summary>
        /// <param name="identity"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        Task<UserTokenDto?> RefreshAsync(ClaimsPrincipal identity,
            CancellationToken token);

        /// <summary>
        /// Регистрация нового пользователя
        /// </summary>
        /// <param name="userDto"></param>
        /// <returns></returns>
        void Register(UserRegistrationDto userDto);
    }
}