@using FrontOffice.Main.Utilities @inject PackageService PackageService @inject ISnackbar Snackbar @if (_selectedPackage != null) { انتخاب روش پرداخت } else { انتخاب پکیج } @if (_isLoading) { در حال بارگذاری پکیج‌ها... } else if (_selectedPackage != null) { @* ── Step 2: Payment method selection ── *@ @* Selected Package Summary *@ @_selectedPackage.Title @_selectedPackage.FormattedPrice روش پرداخت خود را انتخاب کنید: @* Direct Payment — always available *@ پرداخت مستقیم پرداخت آنی از طریق درگاه بانکی @* Daya Loan — only for base package AND first purchase cycle *@ @if (_selectedPackage.SupportsDayaPurchase && PurchaseCycleCount == 0) { اعتبار الماسی دایا تأمین اعتبار از طریق خرید توکن الماس } else if (!_selectedPackage.SupportsDayaPurchase) { اعتبار الماسی دایا فقط برای پکیج پایه قابل استفاده است. } else if (PurchaseCycleCount > 0) { از دور دوم به بعد، خرید پکیج فقط از طریق درگاه بانکی امکان‌پذیر است. } } else { @* ── Step 1: Package tile grid ── *@ پکیج مورد نظر خود را انتخاب کنید: @foreach (var pkg in _packages) { @if (pkg.IsBasePackage) { پایه } @pkg.Title @pkg.FormattedPrice @if (!string.IsNullOrWhiteSpace(pkg.Description)) { @((MarkupString)pkg.Description) } @* Key features *@ @if (pkg.MagicWalletMultiplier > 0) { ضریب جادویی: @pkg.MagicWalletMultiplier.ToString("F1")x } @if (pkg.DiscountMultiplier > 0) { ضریب اعتبار: @pkg.DiscountMultiplier.ToString("F1")x } @if (pkg.SupportsDayaPurchase) { قابل خرید با دایا } } } بستن @code { [CascadingParameter] private IMudDialogInstance MudDialog { get; set; } = default!; /// Number of previous purchase cycles — controls Daya eligibility [Parameter] public int PurchaseCycleCount { get; set; } private List _packages = new(); private PackageDto? _selectedPackage; private bool _isLoading = true; protected override async Task OnInitializedAsync() { _isLoading = true; try { _packages = await PackageService.GetAllPackagesAsync(); } catch (Exception ex) { Snackbar.Add("خطا در بارگذاری پکیج‌ها", MudBlazor.Severity.Error); } finally { _isLoading = false; } } private void SelectPackage(PackageDto package) { _selectedPackage = package; } private void BackToList() { _selectedPackage = null; } private void SelectPaymentMethod(PaymentMethodType method) { var result = new PackagePurchaseResult(_selectedPackage!, method); MudDialog.Close(DialogResult.Ok(result)); } private void Cancel() => MudDialog.Cancel(); private static string GetTileStyle(PackageDto pkg) { return pkg.IsBasePackage ? "border:2px solid var(--mud-palette-primary); background:rgba(99,102,241,.04); cursor:pointer;" : "border:2px solid var(--mud-palette-lines-default); background:var(--mud-palette-surface); cursor:pointer;"; } private static string GetAvatarStyle(PackageDto pkg) { return pkg.IsBasePackage ? "background:rgba(99,102,241,.15); color:#6366f1;" : "background:rgba(16,185,129,.12); color:#10b981;"; } public enum PaymentMethodType { DirectPayment, DayaLoan } public record PackagePurchaseResult(PackageDto Package, PaymentMethodType Method); }