import 'package:flutter/foundation.dart'; import 'package:pshared/models/payment/payment.dart'; import 'package:pshared/models/payment/status.dart'; import 'package:pshared/provider/payment/payments.dart'; import 'package:pweb/utils/report/payment_mapper.dart'; class PaymentDetailsController extends ChangeNotifier { PaymentDetailsController({required String paymentId}) : _paymentId = paymentId; PaymentsProvider? _payments; String _paymentId; Payment? _payment; String get paymentId => _paymentId; Payment? get payment => _payment; bool get isLoading => _payments?.isLoading ?? false; Exception? get error => _payments?.error; bool get canDownload { final current = _payment; if (current == null) return false; final status = statusFromPayment(current); final paymentRef = current.paymentRef ?? ''; return status == OperationStatus.success && paymentRef.trim().isNotEmpty; } void update(PaymentsProvider provider, String paymentId) { if (_paymentId != paymentId) { _paymentId = paymentId; } if (!identical(_payments, provider)) { _payments = provider; } _rebuild(); } Future refresh() async { await _payments?.refresh(); } void _rebuild() { _payment = _findPayment(_payments?.payments ?? const [], _paymentId); notifyListeners(); } Payment? _findPayment(List payments, String paymentId) { final trimmed = paymentId.trim(); if (trimmed.isEmpty) return null; for (final payment in payments) { if (payment.paymentRef == trimmed) return payment; if (payment.idempotencyKey == trimmed) return payment; } return null; } }