using System.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization;

namespace TaxBaik.PortalClient;

/// <summary>
/// Portal 사용자 인증 상태 (쿠키 기반)
/// 서버에서 PortalAuthDefaults.AuthenticationScheme으로 설정한 쿠키를 읽음
/// </summary>
public class PortalAuthenticationStateProvider : AuthenticationStateProvider
{
    private readonly HttpClient _httpClient;

    public PortalAuthenticationStateProvider(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    public override async Task<AuthenticationState> GetAuthenticationStateAsync()
    {
        try
        {
            // 서버의 쿠키 인증 상태 확인 엔드포인트
            var response = await _httpClient.GetAsync("/api/portal/auth/me");

            if (response.IsSuccessStatusCode)
            {
                var json = await response.Content.ReadAsStringAsync();
                // TODO: JSON 파싱 후 ClaimsIdentity 생성
                var claims = new List<Claim>
                {
                    new Claim(ClaimTypes.NameIdentifier, "user-id"),
                    new Claim(ClaimTypes.Name, "User Name")
                };

                var identity = new ClaimsIdentity(claims, "Portal");
                var user = new ClaimsPrincipal(identity);
                return new AuthenticationState(user);
            }
        }
        catch
        {
            // 인증 상태 확인 실패 → 미인증 상태
        }

        return new AuthenticationState(new ClaimsPrincipal());
    }
}
