using PARR.API.Services.Interfaces;

namespace PARR.API.RoleProvider
{
    public class BaseSimpleRoleProvider : ISimpleRoleProvider
    {
        private readonly IServiceProvider serviceProvider;

        public BaseSimpleRoleProvider(IServiceProvider serviceProvider)
        {
            this.serviceProvider = serviceProvider;
        }

        public async Task<ICollection<string>> GetUserRolesAsync(string ipClient)
        {
            // это всё не используем, так как проверка ролей остается прежней, а роли подставляем в ParrAuthenticationHandler

            // Авторизация - проверка на разрешения
            // В данном случае, получаем все разрешения (роли)

            ICollection<string> defaultResult = new string[0];

            using (var scope = serviceProvider.CreateScope())
            {
                //var clientService = scope.ServiceProvider.GetRequiredService<IClientService>();

                //var ipClient = clientService.GetClientIp()?.ToString();
                //if (string.IsNullOrEmpty(ipClient))
                //    return await Task.FromResult(defaultResult);

                var authService = scope.ServiceProvider.GetRequiredService<IAuthService>();

                // проверяем блокировку пользователя
                var userIsBlocked = await authService.UserIsBlockedAsync(ipClient);
                if (userIsBlocked)
                    return await Task.FromResult(defaultResult);

                // получаем пользователя из кэша или бд
                var user = await authService.GetUserAsync(ipClient);
                if (user == null)
                    return await Task.FromResult(defaultResult);


                return user.Roles.Select(t => t.Name).ToList();
            }

            // return await Task.FromResult(defaultResult);
        }
    }
}
