using DateTimeConverterCL;
using FrontOffice.Main.Utilities;
using Microsoft.AspNetCore.Components;
using MudBlazor;

namespace FrontOffice.Main.Pages.Profile;

public partial class MagicWallet : ComponentBase
{
    private MagicWalletStatus _status = new(0, 0, 0, 0, 0, 0, null, 0);
    private bool _isLoading = true;
    private bool _isProcessing;
    private long _chargeAmount;
    private double _progressPercent;
    private string? _paymentResult;

    private readonly long[] _presetAmounts = { 1_000_000, 5_000_000, 10_000_000, 20_000_000, 50_000_000, 100_000_000 };

    [SupplyParameterFromQuery(Name = "payment")]
    public string? PaymentQueryParam { get; set; }

    protected override async Task OnInitializedAsync()
    {
        _paymentResult = PaymentQueryParam;
        await LoadStatus();
    }

    private async Task LoadStatus()
    {
        _isLoading = true;
        _status = await WalletService.GetMagicWalletStatusAsync();

        _progressPercent = _status.MagicMaxDeposit > 0
            ? (double)_status.MagicTotalDeposited / _status.MagicMaxDeposit * 100
            : 0;

        _isLoading = false;
    }

    private async Task StartMagicCharge()
    {
        if (_chargeAmount <= 0 || _isProcessing) return;

        _isProcessing = true;
        StateHasChanged();

        try
        {
            // مبلغ به تومان — CMS خودش موقع ارسال به درگاه ×۱۰ می‌کنه
            var (success, gatewayUrl, error) = await WalletService.InitiateMagicChargeAsync(_chargeAmount);

            if (success && !string.IsNullOrEmpty(gatewayUrl))
            {
                Navigation.NavigateTo(gatewayUrl, forceLoad: true);
            }
            else
            {
                Snackbar.Add(error ?? "خطا در ایجاد درخواست پرداخت", Severity.Error);
            }
        }
        catch (Exception ex)
        {
            Snackbar.Add($"خطا: {ex.Message}", Severity.Error);
        }
        finally
        {
            _isProcessing = false;
            StateHasChanged();
        }
    }

    private static string FormatPrice(long price)
        => string.Format("{0:N0} تومان", price);

    private static string FormatToman(long toman)
        => string.Format("{0:N0} تومان", toman);
}
