@page "/account/confirm-email"
@layout AuthenticationLayout
@using Indotalent.Shared.Consts
@using Microsoft.AspNetCore.Identity
@using Microsoft.AspNetCore.WebUtilities
@using System.Text
@using Indotalent.Data.Entities
@inject UserManager<ApplicationUser> UserManager
@inject NavigationManager Navigation
@inject ISnackbar Snackbar

<PageTitle>Confirming Email - @GlobalConsts.AppInitial</PageTitle>

<div class="confirm-container">
    <div class="confirm-icon-wrapper">
        <div class="confirm-icon-circle">
            <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
                <path stroke-linecap="round" stroke-linejoin="round" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/>
            </svg>
        </div>
    </div>

    <div class="confirm-title">Verifying Your Account</div>
    <div class="confirm-desc">Please wait while we validate your email address...</div>

    <MudProgressCircular Color="Color.Primary" Indeterminate="true" Size="Size.Large" />
</div>

@code {
    [SupplyParameterFromQuery] public string? userId { get; set; }
    [SupplyParameterFromQuery] public string? code { get; set; }

    protected override async Task OnInitializedAsync()
    {
        if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(code))
        {
            Snackbar.Add("Invalid or expired confirmation link.", Severity.Error);
            Navigation.NavigateTo("/account/login");
            return;
        }

        var user = await UserManager.FindByIdAsync(userId);
        if (user == null)
        {
            Snackbar.Add("User record not found.", Severity.Error);
            Navigation.NavigateTo("/account/login");
            return;
        }

        try
        {
            var decodedCode = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
            var result = await UserManager.ConfirmEmailAsync(user, decodedCode);
            await Task.Delay(500);
            if (result.Succeeded)
            {
                Snackbar.Add("Email verified successfully! You can now sign in.", Severity.Success);
            }
            else
            {
                Snackbar.Add("Verification failed. The link may have expired.", Severity.Error);
            }
        }
        catch
        {
            Snackbar.Add("An error occurred during verification.", Severity.Error);
        }

        Navigation.NavigateTo("/account/login");
    }
}