import 'package:logging/logging.dart'; import 'package:pshared/models/file/downloaded_file.dart'; import 'package:pshared/service/authorization/service.dart'; import 'package:pshared/service/services.dart'; class PaymentDocumentsService { static final _logger = Logger('service.payment_documents'); static const String _objectType = Services.payments; static Future getAct(String organizationRef, String paymentRef) async { final encodedRef = Uri.encodeQueryComponent(paymentRef); final url = '/documents/act/$organizationRef?payment_ref=$encodedRef'; _logger.fine('Downloading act document for payment $paymentRef'); final response = await AuthorizationService.getGETBinaryResponse(_objectType, url); final filename = _filenameFromDisposition(response.header('content-disposition')) ?? 'act_$paymentRef.pdf'; final mimeType = response.header('content-type') ?? 'application/pdf'; return DownloadedFile( bytes: response.bytes, filename: filename, mimeType: mimeType, ); } static String? _filenameFromDisposition(String? disposition) { if (disposition == null || disposition.isEmpty) return null; final parts = disposition.split(';'); for (final part in parts) { final trimmed = part.trim(); if (trimmed.toLowerCase().startsWith('filename=')) { var value = trimmed.substring('filename='.length).trim(); if (value.startsWith('"') && value.endsWith('"') && value.length > 1) { value = value.substring(1, value.length - 1); } if (value.isNotEmpty) { return value; } } } return null; } }