import 'dart:convert'; import 'dart:typed_data'; import 'package:file_picker/file_picker.dart'; import 'package:http/http.dart' as http; import '../config/environment.dart'; class NonEBClaimsService { static const String _appSignature = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y'; Map _headers(String token, {bool json = true}) { return { 'Authorization': 'Bearer $token', 'APP-SIGNATURE': _appSignature, if (json) 'Content-Type': 'application/json', }; } Future> createClaim({ required String token, required Map fields, required PlatformFile assetFile, }) async { final request = http.MultipartRequest( 'POST', Uri.parse('${Environment.apiUrlPost}non-eb-claim/create'), ); request.headers.addAll(_headers(token, json: false)); request.fields.addAll(fields); final Uint8List? bytes = assetFile.bytes; if (bytes == null) { throw Exception('Selected file has no bytes'); } request.files.add( http.MultipartFile.fromBytes( 'asset_file', bytes, filename: assetFile.name, ), ); final streamed = await request.send(); final body = await streamed.stream.bytesToString(); return jsonDecode(body) as Map; } Future> listClaims({ required String token, required Map body, }) async { final response = await http.post( Uri.parse('${Environment.apiUrlPost}v1/non-eb-claim/list'), headers: _headers(token), body: jsonEncode(body), ); return jsonDecode(response.body) as Map; } Future> getHistory({ required String token, required String claimId, }) async { final response = await http.get( Uri.parse('${Environment.apiUrlPost}non-eb-claim/history/$claimId'), headers: _headers(token, json: false), ); return jsonDecode(response.body) as Map; } Future> uploadRequiredDoc({ required String token, required String claimId, required String documentName, required PlatformFile file, }) async { final request = http.MultipartRequest( 'POST', Uri.parse( '${Environment.apiUrlPost}non-eb-claim/$claimId/upload-required-doc'), ); request.headers.addAll(_headers(token, json: false)); request.fields['document_name'] = documentName; final Uint8List? bytes = file.bytes; if (bytes == null) { throw Exception('Selected file has no bytes'); } request.files.add( http.MultipartFile.fromBytes( 'file', bytes, filename: file.name, ), ); final streamed = await request.send(); final body = await streamed.stream.bytesToString(); return jsonDecode(body) as Map; } }