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); }