using FrontOffice.Main.Utilities; using Microsoft.AspNetCore.Components; using MudBlazor; namespace FrontOffice.Main.Pages.Profile; public partial class WithdrawalRequests : ComponentBase { [Inject] private CommissionService CommissionService { get; set; } = default!; private long _minWithdrawalAmount = 1_000_000; private List _withdrawals = new(); private List _availablePayouts = new(); private string _statusFilter = "all"; private bool _isLoading = true; private bool _isSubmittingWithdrawal; private CommissionPayoutDto? _selectedPayout; private WithdrawalMethodClient _withdrawMethod = WithdrawalMethodClient.Cash; private string? _withdrawIban; protected override async Task OnInitializedAsync() { await LoadData(); } private async Task LoadData() { _isLoading = true; try { _withdrawals = await WalletService.GetWithdrawalsAsync(); _availablePayouts = await CommissionService.GetWithdrawablePayoutsAsync(); var settings = await WalletService.GetWithdrawalSettingsAsync(); if (settings.MinWithdrawalAmount > 0) _minWithdrawalAmount = settings.MinWithdrawalAmount; } finally { _isLoading = false; } } private static string FormatPrice(long price) => string.Format("{0:N0} تومان", price); private async Task SubmitWithdrawal() { if (_selectedPayout == null) { Snackbar.Add("لطفاً یک واریز را انتخاب کنید.", Severity.Warning); return; } if (_withdrawMethod == WithdrawalMethodClient.Cash && string.IsNullOrWhiteSpace(_withdrawIban)) { Snackbar.Add("برای برداشت نقدی، شماره شبا لازم است.", Severity.Warning); return; } try { _isSubmittingWithdrawal = true; _withdrawIban=_withdrawIban!.Trim().ToUpper().Replace("IR", "").Replace(" ", ""); await WalletService.RequestWithdrawalAsync(_selectedPayout.Id, _withdrawMethod, "IR"+_withdrawIban); Snackbar.Add("درخواست برداشت ثبت شد.", Severity.Success); // بروزرسانی لیست await LoadData(); // ریست فرم _selectedPayout = null; _withdrawIban = null; } catch (Exception ex) { Snackbar.Add($"خطا در ثبت برداشت: {ex.Message}", Severity.Error); } finally { _isSubmittingWithdrawal = false; } } private async Task ApplyFilter() { _isLoading = true; try { int? status = _statusFilter switch { "pending" => 1, "requested" => 2, "withdrawn" => 3, "cancelled" => 4, _ => null }; _withdrawals = await WalletService.GetWithdrawalsAsync(status); } finally { _isLoading = false; } } private static string ResolveStatusText(int status) => status switch { 0 => "ایجاد شده", 1 => "در انتظار پرداخت", 2 => "درخواست برداشت", 3 => "برداشت شده", 4 => "لغو شده", _ => status.ToString() }; private static Color ResolveStatusColor(int status) => status switch { 1 => Color.Info, 2 => Color.Warning, 3 => Color.Success, 4 => Color.Error, _ => Color.Default }; private static string ResolveMethodText(int? method) => method switch { 0 => "نقدی (شبا)", 1 => "الماس", _ => "-" }; }