@extends('frontend.layouts.user.index') @section('title', __('P2P Payment Accounts')) @section('content') @use('Illuminate\Support\Str') @php $availableMethods = collect($methods ?? [])->values(); $savedAccounts = collect($accounts ?? [])->values(); $request = request(); $oldFormType = (string) old('form_type', ''); $methodOptions = $availableMethods->map(function ($method) { $countryLabel = filled($method->country) ? (getCountryDisplayLabel((string) $method->country, false) ?? $method->country) : null; $label = (string) $method->name; if ($countryLabel) { $label .= ' ('.$countryLabel.')'; } return [ 'id' => (int) $method->id, 'label' => $label, ]; })->values(); $methodsPayload = $availableMethods->map(function ($method) { $logoUrl = filled($method->logo) ? asset('storage/'.ltrim((string) $method->logo, '/')) : null; return [ 'id' => (int) $method->id, 'name' => (string) $method->name, 'country' => (string) ($method->country ?? ''), 'logo_url' => $logoUrl, 'instructions' => (string) ($method->instructions ?? ''), 'fields' => $method->normalizedFields(), ]; })->all(); $accountsPayload = $savedAccounts->map(function ($account) { $snapshot = $account->toTradeSnapshot(); $snapshot['label'] = (string) ($account->label ?? $account->effective_label ?? ''); return $snapshot; })->all(); $createOldAccountPayload = $oldFormType === 'create_account' ? [ 'payment_method_id' => old('payment_method_id'), 'label' => old('label'), 'field_values' => old('field_values', []), ] : [ 'payment_method_id' => null, 'label' => null, 'field_values' => [], ]; $createQueryAccountPayload = [ 'payment_method_id' => $request->input('payment_method_id'), 'label' => null, 'field_values' => [], ]; $createInitialAccountPayload = filled($createOldAccountPayload['payment_method_id']) ? $createOldAccountPayload : $createQueryAccountPayload; $updateOldAccountPayload = $oldFormType === 'update_account' ? [ 'account_id' => old('account_id'), 'payment_method_id' => old('payment_method_id'), 'label' => old('label'), 'field_values' => old('field_values', []), ] : null; $accountCards = $savedAccounts->map(function ($account) { $paymentMethod = $account->paymentMethod; $paymentMethodName = (string) ($paymentMethod?->name ?? __('Payment Method')); $accountDisplayName = (string) ($account->effective_label ?: $paymentMethodName); $displayValue = trim((string) ($account->display_value ?? '')); $filteredDetails = collect($account->renderedDetails($paymentMethod)) ->reject(function ($detail) use ($displayValue) { return $displayValue !== '' && trim((string) ($detail['value'] ?? '')) === $displayValue; }) ->values(); return [ 'account' => $account, 'payment_method_name' => $paymentMethodName, 'account_display_name' => $accountDisplayName, 'shows_account_display_name' => strcasecmp(trim($accountDisplayName), trim($paymentMethodName)) !== 0, 'payment_method_logo_url' => filled($paymentMethod?->logo) ? asset('storage/'.ltrim((string) $paymentMethod->logo, '/')) : null, 'payment_method_initial' => Str::upper(Str::substr($paymentMethodName, 0, 1)), 'details_preview' => $filteredDetails->take(2)->all(), 'saved_details_count' => $filteredDetails->count(), 'country_label' => filled($paymentMethod?->country) ? (getCountryDisplayLabel((string) $paymentMethod->country) ?? $paymentMethod->country) : null, ]; })->values(); $configuredMethodIds = $accountCards ->pluck('account.payment_method_id') ->map(fn ($id) => (int) $id) ->filter(fn ($id) => $id > 0) ->unique() ->values() ->all(); $missingMethods = $availableMethods->reject(function ($method) use ($configuredMethodIds) { return in_array((int) $method->id, $configuredMethodIds, true); })->values(); $availableMethodCards = $missingMethods->take(6)->map(function ($method) { $methodName = (string) $method->name; return [ 'id' => (int) $method->id, 'name' => $methodName, 'country_label' => filled($method->country) ? (getCountryDisplayLabel((string) $method->country) ?? $method->country) : __('Global'), 'logo_url' => filled($method->logo) ? asset('storage/'.ltrim((string) $method->logo, '/')) : null, 'initial' => Str::upper(Str::substr($methodName, 0, 1)), 'create_url' => route('user.p2p.payment-accounts.index', ['create' => 1, 'payment_method_id' => $method->id]), ]; })->values(); $regionSupportedMethods = $availableMethods->filter(function ($method) use ($userCountryCode) { return blank($method->country) || (string) $method->country === (string) $userCountryCode; })->count(); $summaryCards = [ [ 'label' => __('Saved Accounts'), 'value' => $accountCards->count(), 'suffix' => __('accounts'), 'icon' => 'fa-wallet', 'tone' => 'primary', ], [ 'label' => __('Methods Ready'), 'value' => count($configuredMethodIds), 'suffix' => __('ready'), 'icon' => 'fa-circle-check', 'tone' => 'success', ], [ 'label' => __('Methods Left'), 'value' => $missingMethods->count(), 'suffix' => __('left'), 'icon' => 'fa-layer-group', 'tone' => 'info', ], [ 'label' => __('Region Ready'), 'value' => $regionSupportedMethods, 'suffix' => __('regions'), 'icon' => 'fa-globe', 'tone' => 'warning', ], ]; $queuedMethodsCount = max($missingMethods->count() - 6, 0); $formattedQueuedMethodsCount = number_format($queuedMethodsCount); $queuedMethodsSummary = trans_choice( ':count more method to set up.|:count more methods to set up.', $queuedMethodsCount, ['count' => $formattedQueuedMethodsCount] ); $paymentAccountPageState = [ 'methods' => $methodsPayload, 'accounts' => $accountsPayload, 'create' => [ 'initialPayload' => $createInitialAccountPayload, 'shouldOpen' => $oldFormType === 'create_account' || $request->boolean('create') || $request->filled('payment_method_id'), ], 'update' => [ 'shouldOpen' => $oldFormType === 'update_account', 'accountId' => data_get($updateOldAccountPayload, 'account_id'), 'payload' => $updateOldAccountPayload, 'urlTemplate' => route('user.p2p.payment-accounts.update', ['paymentAccount' => '__ACCOUNT__']), ], 'lang' => [ 'methodInstructions' => __('Method Instructions'), 'noMethodInstructions' => __('No extra method instructions provided.'), 'selectOption' => __('Select option'), 'noDynamicFields' => __('No dynamic fields configured for this method yet.'), 'accountLabelExample' => __('Example: Personal :method', ['method' => ':method']), 'accountLabelGeneric' => __('Example: Personal account'), 'deleteModalTitle' => __('Delete Payment Account'), 'deleteModalBody' => __('Are you sure you want to delete this payment account? This action cannot be undone.'), 'deleteModalLabel' => __('Account'), 'deleteModalConfirm' => __('Yes, Delete'), ], ]; @endphp