using HanyadikHetVan.Data.Entities;
using IdentityServer4.Models;
using IdentityServer4.Services;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Logging;
using System;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;

namespace HanyadikHetVan.Infrastructure
{
    public class ProfileService : IProfileService
    {
        private readonly UserManager<User> userManager;
        private readonly ILogger<ProfileService> _logger;

        public ProfileService(UserManager<User> userManager, ILogger<ProfileService> logger)
        {
            this.userManager = userManager;
            this._logger = logger;
        }

        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
            var user = await userManager.GetUserAsync(context.Subject);
            var roles = await userManager.GetRolesAsync(user);
            if (context.RequestedClaimTypes.Any(x => x == "user_role"))
            {
                context.IssuedClaims.AddRange(roles.Select(x => new Claim("user_role", x)));
            }
            if (context.RequestedResources.ParsedScopes.Any(x => x.ParsedName == "profile"))
            {
                context.IssuedClaims.Add(new Claim("email", user.Email));
            }
        }
        public async Task IsActiveAsync(IsActiveContext context)
        {
            var user = await userManager.GetUserAsync(context.Subject);
            context.IsActive = user != null;
        }
    }
}
