using PARR.API.Authentication.Models;

namespace PARR.API.Services.Interfaces
{
    public interface IAuthService
    {
        /// <summary>
        /// Получить пользователя с ролями по ip адресу. 
        /// Смотрим в кэше, затем в БД. При необходимости блокирует или добавлет в кэш.
        /// </summary>
        /// <param name="ipAddress"></param>
        /// <returns></returns>
        Task<UserCache?> GetUserAsync(string ipAddress);

        /// <summary>
        /// Проверяет, блокировку пользователя
        /// </summary>
        /// <param name="ipAddress"></param>
        /// <returns></returns>
        Task<bool> UserIsBlockedAsync(string ipAddress);

        /// <summary>
        /// Удалить из кэша пользователя
        /// </summary>
        /// <param name="ipAddress"></param>
        /// <returns></returns>
        Task RemoveCacheUserAsync(string ipAddress);

        /// <summary>
        /// Разблокировать пользователя
        /// </summary>
        /// <param name="ipAddress"></param>
        /// <returns></returns>
        Task UnlockUserAsync(string ipAddress);

        /// <summary>
        /// Получить текущего пользователя
        /// </summary>
        /// <returns></returns>
        Task<UserCache?> GetCurrentUserAsync();
    }
}
