using Mirea.Api.Security.Common.Domain;
using Mirea.Api.Security.Common.Interfaces;
using System.Text.Json.Serialization;

namespace Mirea.Api.Security.Common.OAuth2.UserInfo;

internal class GoogleUserInfo : IUserInfo
{
    [JsonPropertyName("id")]
    public required string Id { get; set; }

    [JsonPropertyName("email")]
    public required string Email { get; set; }

    [JsonPropertyName("given_name")]
    public required string GivenName { get; set; }

    [JsonPropertyName("family_name")]
    public required string FamilyName { get; set; }

    [JsonPropertyName("name")]
    public required string Name { get; set; }

    [JsonPropertyName("picture")]
    public required string Picture { get; set; }

    [JsonPropertyName("verified_email")]
    public bool? VerifiedEmail { get; set; }

    public OAuthUser MapToInternalUser() =>
        new()
        {
            Id = Id,
            Email = VerifiedEmail.HasValue && VerifiedEmail.Value ? Email : null,
            FirstName = GivenName,
            LastName = FamilyName,
            IconUri = Picture
        };
}