using System.Security.Claims;

namespace Books.Api.Authentication;

public static class UserExtensions
{
    public static UserContext? GetUserContext(this ClaimsPrincipal? principal)
    {
        if (principal?.Identity?.IsAuthenticated != true)
            return null;

        return new UserContext(
            Id: principal.FindFirst(ClaimTypes.NameIdentifier)?.Value,
            Email: principal.FindFirst(ClaimTypes.Email)?.Value
                   ?? principal.FindFirst("preferred_username")?.Value,
            Name: principal.FindFirst(ClaimTypes.GivenName)?.Value
                  ?? principal.FindFirst(ClaimTypes.Name)?.Value,
            CompanyId: principal.FindFirst("company_id")?.Value,
            IsApiKey: principal.FindFirst(ClaimTypes.AuthenticationMethod)?.Value == "api_key"
        );
    }

    public static string? GetClaimValue(this ClaimsPrincipal principal, string claimType)
    {
        return principal.FindFirst(claimType)?.Value;
    }
}

public record UserContext(
    string? Id,
    string? Email,
    string? Name,
    string? CompanyId,
    bool IsApiKey);
