import 'package:file_picker/file_picker.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:nhance_partner/data/services/auth_service.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'dart:convert'; import '../../data/utils/toastNotification.dart'; import '../config/env.dart'; import 'package:universal_html/html.dart' as html; import 'package:http/http.dart' as http; class ApiService { late final BuildContext context; String? _token; Future _initializeToken() async { _token = await AuthService.getToken(); print("APISERTOKEN - $_token"); } Future _clearLocalStorageAndRedirect() async { final prefs = await SharedPreferences.getInstance(); await prefs.clear(); // Assuming you have access to the context ToastHelper.showErrorToast(context, 'Session Out'); Navigator.pushNamed(context, 'login'); } Future> _makeGetRequest( Uri url, Map headers, ) async { final response = await http.get(url, headers: headers); return _handleResponse(response); } // Future> _makePostRequest( // Uri url, Map body, Map headers) async { // final response = await http.post(url, headers: headers, body: body); // return _handleResponse(response); // } // // Future> _handleResponse(http.Response response) async { // if (response.statusCode == 200) { // return jsonDecode(response.body); // } else if (response.statusCode == 401) { // await _clearLocalStorageAndRedirect(); // return {}; // } else { // throw Exception('Failed to load data'); // } // } Future _makeGethttpRequest( Uri url, Map headers, ) async { final response = await http.get(url, headers: headers); if (response.statusCode == 200) { return response; // return full http.Response, not Map } else { throw Exception('Failed request: ${response.statusCode}'); } } Future> _makePostRequestJson( Uri url, Map body, Map headers, ) async { final response = await http.post( url, headers: headers, body: jsonEncode(body), // ✅ convert to JSON ); return _handleResponse(response); } // --------------------------- COMMON FILES __________________________________________ Future> _handleResponse(http.Response response) async { if (response.statusCode == 200) { return jsonDecode(response.body); } else if (response.statusCode == 401) { await _clearLocalStorageAndRedirect(); return {}; } else { throw Exception('Failed to load data'); } } Future getPdfDownload1(path, id) async { // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/downloadAgentCertificateFile?agent_id=1', // ); print('GetDownload'); final url = Uri.parse('https://venbait.in/nhance/partner/dev/$path'); print('GetDownload - $url'); await _initializeToken(); if (_token == null) { throw Exception('Token not found. Please log in.'); } final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGethttpRequest(url, headers); if (response.statusCode == 200) { try { print("PDf Dowloaded"); // Create a blob from the response body final blob = html.Blob([response.bodyBytes]); // Generate a download URL for the blob final url = html.Url.createObjectUrlFromBlob(blob); // Create a link element to trigger the download final anchor = html.AnchorElement(href: url) ..setAttribute('download', 'nhancePartner_$id.pdf') ..click(); // Revoke the download URL to free up resources html.Url.revokeObjectUrl(url); } catch (e) { throw Exception('Error parsing response: $e'); } } else if (response.statusCode == 404) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text('File not found.'), // content: Text('File not found.'), actions: [ TextButton( child: Text('OK'), onPressed: () { Navigator.of(context).pop(); // Close the dialog }, ), ], ); }, ); } else { throw Exception('Failed to load plans'); } } Future getPdfDownload(String path, String id) async { print('getPdfDownload 1'); print('getPdfDownload 1 - $path'); if (path.isEmpty) { ToastHelper.showInfoToast(context, 'No file path found.'); return; } final url = Uri.parse('https://venbait.in/nhance/partner/dev/$path'); await _initializeToken(); print('getPdfDownload 2'); if (_token == null) throw Exception('Token not found. Please log in.'); final headers = { 'Authorization': 'Bearer $_token', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGethttpRequest(url, headers); print('getPdfDownload 3'); if (response.statusCode == 200) { final blob = html.Blob([response.bodyBytes]); final blobUrl = html.Url.createObjectUrlFromBlob(blob); print('getPdfDownload $blobUrl'); // --- filename resolution --- String fileName = 'download_$id'; print('getPdfDownloadfileName $fileName'); final contentDisp = response.headers['content-disposition']; print('getPdfDownloadcontentDisp $contentDisp'); if (contentDisp != null && contentDisp.contains('filename=')) { print('getPdfDownloadcontentDisp..1'); fileName = contentDisp.split('filename=')[1].replaceAll('"', ''); print('getPdfDownloadcontentDisp..2'); } else { print('getPdfDownloadcontentDisp..3'); // fallback: URL or id fileName = path.split('/').last; if (id != null) fileName = '${id}_$fileName'; } final anchor = html.AnchorElement(href: blobUrl) ..setAttribute('download', fileName) ..click(); print('getPdfDownloadcontentDisp..4'); html.Url.revokeObjectUrl(blobUrl); } else if (response.statusCode == 404) { showDialog( context: context, builder: (context) => AlertDialog( title: const Text('File not found.'), actions: [ TextButton( child: const Text('OK'), onPressed: () => Navigator.of(context).pop(), ), ], ), ); } else if (response.statusCode == 500) { ToastHelper.showInfoToast(context, 'No File Not Found'); } else { ToastHelper.showInfoToast(context, 'No File Not Found'); throw Exception('Failed to download file'); } } Future downloadFile({ required String? apiUrl, required PlatformFile? localFile, required String? fileName, String? apiId, // optional if your API needs it }) async { try { if (localFile != null) { if (kIsWeb) { final blob = html.Blob([localFile.bytes!]); final url = html.Url.createObjectUrlFromBlob(blob); final anchor = html.AnchorElement(href: url) ..setAttribute('download', localFile.name) ..click(); html.Url.revokeObjectUrl(url); print("Download triggered successfully (web)!"); } else { print("Local file path: ${localFile.path}"); // await OpenFilex.open(localFile.path!); } } else if (apiUrl != null) { print("Download from API: $apiUrl"); print("Download from API: $apiId!"); await getPdfDownload(apiUrl, apiId!); } else { print("⚠️ No file available to download"); } } catch (e) { print("Error during download: $e"); } } Future> updateStatus(id, status, role) async { final Map data = { "id": int.parse(id), "is_active": int.parse(status), }; final url; if (role == 'staff') { url = Uri.parse( 'https://venbait.in/nhance/partner/dev/api/staff/changeStaffStatus', ); } else { url = Uri.parse( 'https://venbait.in/nhance/partner/dev/api/agent/changeAgentStatus', ); } // final token = await getToken(); // Fetch token if (_token == null) { throw Exception('Token not found. Please log in.'); } print("data------- $data}"); final headers = { 'Authorization': 'Bearer $_token', 'Content-Type': 'application/json', 'app-signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makePostRequestJson(url, data, headers); return response; } // ----------------------------------- Dashboard ------------------------------------------------- Future> fetchDashboard(int id, role) async { // print(_token); if (_token == null) { await _initializeToken(); } final url; if (role == 'manager') { url = Uri.parse('${Env.apiUrl}dashboard/managerDashboard?manager_id=$id'); } else if (role == 'staff') { url = Uri.parse('${Env.apiUrl}dashboard/staffDashboard?staff_id=$id'); } else { url = Uri.parse('${Env.apiUrl}dashboard/agentDashboard?agent_id=$id'); } // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/agentList?manager_id=${managerId}', // ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } // -------------------------------- AGENT ---------------------------------------------- Future> fetchAgentIncentiveList(agentId) async { // print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Env.apiUrl}agent/agentIncentiveFileList?agent_id=${agentId}', ); // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/agentIncentiveFileList?agent_id=${agentId}', // ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> fetchManagerIncentiveList(mangerId) async { // print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Env.apiUrl}staff/managerIncentiveFileList?manager_id=$mangerId', ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> fetchAgentUserList(int managerId) async { // print(_token); if (_token == null) { await _initializeToken(); } final userId = '1'; final url = Uri.parse( '${Env.apiUrl}agent/agentList?manager_id=${managerId}', ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> findSingleAgentData(id) async { // print(_token); if (_token == null) { await _initializeToken(); } // final url = Uri.parse('${Env.apiUrl}/api/agent/agentList'); // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/findAgent?id=$id', // ); final url = Uri.parse('${Env.apiUrl}agent/findAgent?id=$id'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> deleteAgentIncentiveFile(id) async { // print(_token); if (_token == null) { await _initializeToken(); } // final url = Uri.parse('${Env.apiUrl}/api/agent/agentList'); // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/deleteAgentIncentiveFile?id=$id', // ); final url = Uri.parse('${Env.apiUrl}agent/deleteAgentIncentiveFile?id=$id'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } // ------------------------------------ STAFF ----------------------------------------------------- Future> fetchStaffUserList(int managerId) async { // print(_token); if (_token == null) { await _initializeToken(); } // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/staff/staffList?manager_id=${managerId}', // ); final url = Uri.parse( '${Env.apiUrl}staff/staffList?manager_id=${managerId}', ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> findSingleStaffData(id) async { // print(_token); if (_token == null) { await _initializeToken(); } // final url = Uri.parse('${Env.apiUrl}/api/staff/findStaff?id=$id'); // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/staff/findStaff?id=$id', // ); final url = Uri.parse('${Env.apiUrl}staff/findStaff?id=$id'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } // ----------------------------------- ENQUIRY ------------------------------------------------- Future> fetchEnquiryList(int id, role) async { // print(_token); if (_token == null) { await _initializeToken(); } final url; if (role == 'manager') { url = Uri.parse('${Env.apiUrl}enquiry/enquiryList?manager_id=$id'); } else if (role == 'staff') { url = Uri.parse('${Env.apiUrl}enquiry/enquiryList?staff_id=$id'); } else { url = Uri.parse('${Env.apiUrl}enquiry/enquiryList?agent_id=$id'); } // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/agentList?manager_id=${managerId}', // ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> findSingleEnquiryData(id) async { // print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Env.apiUrl}enquiry/enquiryList?enquiry_id=$id'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> findEnqQuotePolicyView(id) async { // print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Env.apiUrl}enquiry/enquiryQuotePolicyView?enquiry_id=$id', ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } //------------------------------------ Quotation ------------------------------------------------ Future> fetchQuotationList(int managerId) async { // print(_token); if (_token == null) { await _initializeToken(); } // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/staff/staffList?manager_id=${managerId}', // ); final url = Uri.parse( '${Env.apiUrl}quotation/quotationList?manager_id=${managerId}', ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> findSingleQuotationData(id) async { // print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Env.apiUrl}quotation/findQuotation?id=$id'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } // ----------------------------------- POLICY ------------------------------------------------- Future> fetchPolicyList(int id, role) async { // print(_token); if (_token == null) { await _initializeToken(); } final userId = '1'; final url; if (role == 'manager') { url = Uri.parse('${Env.apiUrl}enquiry/enquiryList?manager_id=$id'); } else { url = Uri.parse('${Env.apiUrl}enquiry/enquiryList?staff_id=$id'); } // else { // url = Uri.parse('${Env.apiUrl}endorsement/endorsementList?agent_id=$id'); // } // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/agentList?manager_id=${managerId}', // ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> fetchPolicyDataOnlyList(int id, role) async { // print(_token); if (_token == null) { await _initializeToken(); } final userId = '1'; final url; if (role == 'manager') { url = Uri.parse( '${Env.apiUrl}enquiry/enquiryList?manager_id=$id&only_policy_data=true', ); } else { url = Uri.parse( '${Env.apiUrl}enquiry/enquiryList?staff_id=$id&only_policy_data=true', ); } // else { // url = Uri.parse('${Env.apiUrl}endorsement/endorsementList?agent_id=$id'); // } // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/agentList?manager_id=${managerId}', // ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } // ----------------------------------- CLAIMS ------------------------------------------------- Future> fetchClaimList(int id, role) async { // print(_token); if (_token == null) { await _initializeToken(); } final userId = '1'; final url; if (role == 'manager') { url = Uri.parse('${Env.apiUrl}claim/ClaimList?manager_id=$id'); } // else if (role == 'staff') { // url = Uri.parse('${Env.apiUrl}enquiry/enquiryList?staff_id=$id'); // } else { url = Uri.parse('${Env.apiUrl}claim/ClaimList?agent_id=$id'); } // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/agentList?manager_id=${managerId}', // ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> findSingleClaimData(id) async { // print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Env.apiUrl}claim/ClaimList?policy_number=$id'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } // ----------------------------------- ENDORSEMENT ------------------------------------------------- Future> fetchEndorsementList(int id, role) async { // print(_token); if (_token == null) { await _initializeToken(); } final userId = '1'; final url; if (role == 'manager') { url = Uri.parse( '${Env.apiUrl}endorsement/endorsementList?manager_id=$id', ); } // else if (role == 'staff') { // url = Uri.parse('${Env.apiUrl}enquiry/enquiryList?staff_id=$id'); // } else { url = Uri.parse('${Env.apiUrl}endorsement/endorsementList?agent_id=$id'); } // final url = Uri.parse( // 'https://venbait.in/nhance/partner/dev/api/agent/agentList?manager_id=${managerId}', // ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } Future> findSingleEnrosmentData(id) async { // print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Env.apiUrl}endorsement/endorsementList?policy_number=$id', ); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } // --------------------------------- MASTER DATA ---------------------------------------------- Future> fetchMasterDropDown(String val) async { // print(_token); if (_token == null) { await _initializeToken(); } print('VAl - $val'); dynamic url; if (val == 'staffRole') { url = Uri.parse('${Env.apiUrl}master/getRoleMaster'); } else if (val == 'vehicleType') { url = Uri.parse('${Env.apiUrl}master/getVehicleTypeMaster'); } else if (val == 'InsuranceType') { url = Uri.parse('${Env.apiUrl}master/getInsurancePlanTypeMaster'); } else if (val == 'Insurers') { url = Uri.parse('${Env.apiUrl}master/getInsurersMaster'); } else if (val == 'Staffs') { url = Uri.parse('${Env.apiUrl}master/getStaffMaster'); } else if (val == 'Claim') { url = Uri.parse('${Env.apiUrl}master/getClaimMaster'); } else if (val == 'Endorsement') { url = Uri.parse('${Env.apiUrl}master/getEndorsementMaster'); } final headers = { 'Authorization': 'Bearer $_token' ?? '', 'App-Signature': 'nhance-partner-2025-signature-35468846JRhH551HK', }; final response = await _makeGetRequest(url, headers); return response; } }