import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:nhancepolicy/service/token_storage_service.dart'; import 'dart:convert'; import '../config/environment.dart'; import '../customAppBar/toastHelper.dart'; class ApiService { final BuildContext context; final tokenService = TokenStorageService(); String? _token; String? _hrtoken; bool _isSessionOutToastShown = false; // Flag to track toast message ApiService(this.context) { _initializeToken(); } Future _initializeToken() async { _token = tokenService.getCurrentToken() ?? ''; } Future getTokenLoadAPI(token) async { _token = token; } Future> getClientLogoAndDetailsToApi( String clientId, String empCode, String branchID) async { print(_token); if (_token == null) { await _initializeToken(); } final empClientId = await tokenService.readValue('empClientId'); final empClientBranchId = await tokenService.readValue('empClientBranchId'); final url = Uri.parse( '${Environment.apiUrl}getClientDetails?post_client_id=$empClientId&post_branch_id=$empClientBranchId&pre_client_id=$clientId&pre_branch_id=$branchID'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getActiveAndInactivePolicyDetails( String? clientId, String? empCode, String? status, String? branchID, String? mobileNo,String? emailId) async { if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getEmployeeActiveOrInactivePolicy?client_id=${clientId ?? ''}&emp_code=${empCode ?? ''}&type=${status ?? ''}&client_branch_id=${branchID ?? ''}&mobile_no=${mobileNo ?? ''}&email_id=${emailId ?? ''}'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getSelfEmployeeProfileToApi( token, String clientId, String empCode, String branchID, String client_policy_id) async { print(_token); _token = await token; if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getEmployeeProfile?emp_code=$empCode&client_id=$clientId&client_branch_id=$branchID&client_policy_id=$client_policy_id'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> fetchRelationshipListToApi() async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}relationshipList'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getGpaEmpPolicyDetailsToApi( String empPrimaryId, String empCode, String clientId, String policy, String branchID, login_by_hr) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getEmployeePolicy?id=$empPrimaryId&emp_code=$empCode&client_id=$clientId&policy=$policy&client_branch_id=$branchID&login_by_hr=$login_by_hr'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getGmcEmpPolicyDetailsToApi( String empPrimaryId, String empCode, String clientId, String policy, String branchID, login_by_hr) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getEmployeePolicy?id=$empPrimaryId&emp_code=$empCode&client_id=$clientId&policy=$policy&client_branch_id=$branchID&login_by_hr=$login_by_hr'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getGmcSiTopUpToApi( String client_id, String emp_code, String policy, String branchID) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getAddOnPolicy?client_id=$client_id&emp_code=$emp_code&policy=$policy&client_branch_id=$branchID'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getGmcSiParentTopUpToApi( String client_id, String emp_code, String policy, String branchID) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getAddOnPolicy?client_id=$client_id&emp_code=$emp_code&policy=$policy&client_branch_id=$branchID'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getGmcDependentAddOnsToApi( String client_id, String emp_code, String policy, String branchID) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getAddOnPolicy?client_id=$client_id&emp_code=$emp_code&policy=$policy&client_branch_id=$branchID'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getExcelFileErrorsApi(id,type) async { print(_token); if (_token == null) { await _initializeToken(); } final apiURL; if(type == 'post'){ apiURL = Environment.apiUrlPost; } else { apiURL = Environment.apiUrl; } final url = Uri.parse( '${apiURL}getExcelFileErrors/${id}/api'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> removeAddonsGmcDependentToAPI( String empCodeString, String addOnsDependentClientPolicyId) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}removeEmpAndEmpPolicyData?emp_code=$empCodeString&client_policy_id=$addOnsDependentClientPolicyId'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> removeAddonsGmcSiToAPI( String empCodeString, String topUpClientPolicyId) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}removeEmpAndEmpPolicyData?emp_code=$empCodeString&client_policy_id=$topUpClientPolicyId'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> removeAddonsGmcParentSiToAPI( String empCodeString, String topUpParentClientPolicyId) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}removeEmpAndEmpPolicyData?emp_code=$empCodeString&client_policy_id=$topUpParentClientPolicyId'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> deleteItemToApi(id) async { print(_token); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}deleteDependence?id=$id'); final headers = { 'Authorization': 'Bearer $_token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> saveFamilyMemberDetailsToApi( List> formDataList) async { print('saveFamilyMemberDetailsToApi API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}addEmployeeAndDependence'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formDataList); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } Future> saveAddOnsDetailsToApi( List> formDataList) async { print('saveAddOnsDetailsToApi API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}addEmployeeAndDependence'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formDataList); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } Future> sendAddonsGmcDependentToAPI( List> formDataList) async { print('saveAddOnsDetailsToApi API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}createOrUpdateEmployeePolicySiAmount'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formDataList); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } Future> sendAddonsGmcSiToAPI( List> formDataList) async { print('saveAddOnsDetailsToApi API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}createOrUpdateEmployeePolicySiAmount'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formDataList); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } Future> sendAddonsGmcParentSiToAPI( List> formDataList) async { print('saveAddOnsDetailsToApi API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}createOrUpdateEmployeePolicySiAmount'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formDataList); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } Future> sendAddOnToAPI( Map formData) async { print('sendAddOnToAPI API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}iAgreeForAddOn'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formData); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } Future> topUpSiCalculationToAPI(formDataList) async { print('saveAddOnsDetailsToApi API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}calculatePremium'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formDataList); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } Future> topUpParentSiCalculationToAPI( formDataList) async { print('saveAddOnsDetailsToApi API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}calculatePremium'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formDataList); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } Future> addOnsDependentCalculationToAPI( formDataList) async { print('saveAddOnsDetailsToApi API SERVICE'); if (_token == null) { await _initializeToken(); } final url = Uri.parse('${Environment.apiUrl}calculatePremium'); final headers = { 'Authorization': 'Bearer $_token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; // Convert formDataList to JSON string final formDataJson = jsonEncode(formDataList); // Send formDataJson as the body final response = await _makePostRequest(url, formDataJson, headers); return response; } //HR API STARTS Future> getCashDepositDetailsToApi( String clintID, String empRefId, String hr_id, String token) async { print("getCashDepositDetailsToApi1"); print("HRID- $hr_id"); if (token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getPolicyLevelEmployeeSummaryData?client_id=$clintID&client_branch_id=$empRefId&hr_id=$hr_id'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getActiveCashDepositDetailsToApi(String clintID, String empRefId, String hr_id, String token, int emp_status) async { print("getCashDepositDetailsToApi1"); if (token == null) { await _initializeToken(); } // final url = Uri.parse( // '${Environment.apiUrl}getPolicyLevelEmployeeSummaryData?client_id=$clintID&client_branch_id=$empRefId&hr_id=470'); final url = Uri.parse( '${Environment.apiUrlPost}getPolicyLevelEmployeeSummaryData?client_id=$clintID&client_branch_id=$empRefId&policy_status=$emp_status&hr_id=$hr_id'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getCDPoliciesToApi( String clintID, String hr_id, String token) async { print("getCashDepositDetailsToApi1"); final url = Uri.parse( '${Environment.apiUrlPost}cdSummaryData?client_id=$clintID&hr_id=$hr_id'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getImportLogHrActivity( String? postId, String? preId, String token, String activity) async { print("getCashDepositDetailsToApi1"); print('postId1 - $postId'); print('preId1 - $preId'); print('activity1 - $activity'); // final url = Uri.parse( // '${Environment.apiUrlPost}logHrActivity?user_id=$postId&pre_hr_id=$preId&user_type=hr&activity=$activity'); final url = Uri.parse('${Environment.apiUrlPost}logHrActivity'); final headers = { 'Authorization': 'Bearer ${token ?? ''}', 'APP-SIGNATURE': 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y', }; final body = { 'user_id': postId, 'pre_hr_id': preId, 'user_type': 'hr', 'activity': activity, }; final response = await http.post( url, headers: headers, body: jsonEncode(body), ); // final response = await _makeGetRequest(url, headers); if (response.statusCode == 200) { return jsonDecode(response.body); } else { throw Exception( 'Failed to log HR activity: ${response.statusCode} ${response.body}'); } } Future> getEcardBulkDownloadApi(client_policy_id,empHrId,emp_policy_ids,String token) async { // final url = Uri.parse( // '${Environment.apiUrlPost}logHrActivity?user_id=$postId&pre_hr_id=$preId&user_type=hr&activity=$activity'); final url = Uri.parse('${Environment.apiUrlPost}bulkEcardDownloadAsZip'); final headers = { 'Authorization': 'Bearer ${token ?? ''}', 'APP-SIGNATURE': 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y', }; final body = { 'client_policy_id': client_policy_id, 'hr_id': empHrId, 'emp_policy_ids':emp_policy_ids, }; final response = await http.post( url, headers: headers, body: jsonEncode(body), ); // final response = await _makeGetRequest(url, headers); if (response.statusCode == 200) { return jsonDecode(response.body); } else { throw Exception( 'Failed to log HR activity: ${response.statusCode} ${response.body}'); } } Future> getPostLogHrActivity( String? postId, String? preId, String token, String activity) async { print("getCashDepositDetailsToApi1"); print('postId1 - $postId'); print('preId1 - $preId'); print('activity1 - $activity'); // final url = Uri.parse( // '${Environment.apiUrlPost}logHrActivity?user_id=$postId&pre_hr_id=$preId&user_type=hr&activity=$activity'); final url = Uri.parse('${Environment.apiUrlPost}logHrActivity'); final headers = { 'Authorization': 'Bearer ${token ?? ''}', 'APP-SIGNATURE': 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y', }; final body = { 'user_id': postId, 'pre_hr_id': preId, 'user_type': 'hr', 'activity': activity, }; final response = await http.post( url, headers: headers, body: jsonEncode(body), ); // final response = await _makeGetRequest(url, headers); if (response.statusCode == 200) { return jsonDecode(response.body); } else { throw Exception( 'Failed to log HR activity: ${response.statusCode} ${response.body}'); } } Future> getPreLogHrActivity( String? postId, String? preId, String token, String activity) async { print("getCashDepositDetailsToApi1"); print('postId1 - $postId'); print('preId1 - $preId'); print('activity1 - $activity'); final url = Uri.parse('${Environment.apiUrl}logHrActivity'); final headers = { 'Authorization': 'Bearer ${token ?? ''}', 'APP-SIGNATURE': 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y', }; final body = { 'user_id': postId, 'pre_hr_id': preId, 'user_type': 'hr', 'activity': activity, }; final response = await http.post( url, headers: headers, body: jsonEncode(body), ); // final response = await _makeGetRequest(url, headers); if (response.statusCode == 200) { return jsonDecode(response.body); } else { throw Exception( 'Failed to log HR activity: ${response.statusCode} ${response.body}'); } } Future> postHrDashboard(params,token) async { final url = Uri.parse('${Environment.apiUrlPost}getHrDashboad'); final headers = { 'Authorization': 'Bearer ${token ?? ''}', 'APP-SIGNATURE': 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y', }; final body = params; final response = await http.post( url, headers: headers, body: jsonEncode(body), ); // final response = await _makeGetRequest(url, headers); if (response.statusCode == 200) { return jsonDecode(response.body); } else { throw Exception( 'Failed to log HR activity: ${response.statusCode} ${response.body}'); } } Future> getClaimPoliciesToApi(String token) async { print("getgetClaimPoliciesToApii1"); final url = Uri.parse('${Environment.apiUrlPost}claimsSearch'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getClaimPoliciesFileDownload(id,String token) async { final url = Uri.parse('${Environment.apiUrlPost}hrFileDownload?id=$id'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getClaimPoliciesListDataToApi( String token, Map body) async { print("getgetClaimPoliciesToApii1"); final url = Uri.parse('${Environment.apiUrlPost}claimsSearch'); final headers = { 'APP-SIGNATURE' :'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y', 'Authorization': 'Bearer $token', 'Content-Type': 'application/json', }; final response = await http.post( url, headers: headers, body: jsonEncode(body), ); if (response.statusCode == 200) { return jsonDecode(response.body); } else { throw Exception( 'Failed to load claims list: ${response.statusCode} ${response.body}'); } } Future> getEcardRequest(eCardParam,String token) async { final url = Uri.parse('${Environment.apiUrlPost}ecardRequest'); final headers = { 'Authorization': 'Bearer $token' ?? '', 'Content-Type': 'application/json', // Ensure content type is JSON }; final jsonBody = jsonEncode(eCardParam); // Send formDataJson as the body final response = await _makePostRequestWithoutFormData(url,jsonBody, headers); return response; } Future> getCdTransactionData( String clintID, String insurerId, String cd_ac_pk, String token) async { print("getCashDepositDetailsToApi1"); final url = Uri.parse( '${Environment.apiUrlPost}cdTransactionData?client_id=$clintID&insurer_id=$insurerId&cd_ac_pk=$cd_ac_pk'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getOpenEndorsementFileData(id, String token) async { print("getPolicyAndEndorsementFiles"); final url = Uri.parse( '${Environment.apiUrlPost}downloadPolicyFiles?file_id=$id'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getCdEndorsementData(id, String token) async { print("getPolicyAndEndorsementFiles"); final url = Uri.parse( '${Environment.apiUrlPost}getPolicyAndEndorsementFiles?cd_ac_pk=$id'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getClaimsHistoryToApi( String ticket_type_id, String token) async { print("getCashDepositDetailsToApi1"); final url = Uri.parse( '${Environment.apiUrlPost}claimView?ticket_id=$ticket_type_id'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getSampleFileDownload(String token) async { final url = Uri.parse( '${Environment.apiUrl}downloadSampleExcel/enrollment'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getEmployeeAndDependenceToApi( String clintID, getPolicyNo, String empRefId, String token) async { print(_hrtoken); if (token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrlPost}getEmployeeAndDependenceByClientId?client_id=$clintID&client_policy_id=$getPolicyNo&client_branch_id=$empRefId'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getFileUploadMastersToApi(String token) async { print(_hrtoken); if (token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrlPost}hrFileUploadMasters'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } Future> getFileListToApi(empPrimaryId,cardPolicyNo,empClientId,String token,String type) async { print(_hrtoken); if (token == null) { await _initializeToken(); } final apiURL; if(type == 'post'){ apiURL = Environment.apiUrlPost; } else { apiURL = Environment.apiUrl; } final url = Uri.parse( '${apiURL}hrFileList?created_by=$empPrimaryId&policy_no=$cardPolicyNo&client_id=$empClientId'); final headers = { 'Authorization': 'Bearer ${token ?? ''}', 'APP-SIGNATURE': 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y', }; final response = await _makeGetRequest(url, headers); return response; } // Future> getHrFileDownloadToApi(id,String token) async { // print(_hrtoken); // if (token == null) { // await _initializeToken(); // } // final url = Uri.parse( // '${Environment.apiUrl}hrFileDownload?id=$id'); // final headers = { // 'Authorization': 'Bearer $token' ?? '', // }; // final response = await _makeGetRequest(url, headers); // return response; // } Future> getEmployeeAndDependenceToApiPre( String clintID, String getPolicyNo, String empRefId, String token) async { print(_hrtoken); if (token == null) { await _initializeToken(); } final url = Uri.parse( '${Environment.apiUrl}getEmployeeAndDependenceByClientId?client_id=$clintID&client_policy_id=$getPolicyNo&client_branch_id=$empRefId'); final headers = { 'Authorization': 'Bearer $token' ?? '', }; final response = await _makeGetRequest(url, headers); return response; } // Future> getTrackClaimsList( // String empMobileNo, String empCode) async { // final url = Uri.parse( // '${Environment.apiUrlTicket}/ticket/get_ticket_data?emp_code=$empCode&mobile_number=$empMobileNo'); // final response = await _makeGetRequest(url, { // 'Token': Environment.ticketToken, // }); // return response; // } // // Future> fetchDepartmentList() async { // final url = Uri.parse('${Environment.apiUrlTicket}/departments'); // final response = await _makeGetRequest(url, { // 'Token': Environment.ticketToken, // }); // return response; // } // // Future> sendFormDataToApi( // Map formData) async { // final url = Uri.parse('${Environment.apiUrlTicket}/tickets/create'); // // Convert formData to Map // Map stringFormData = // formData.map((key, value) => MapEntry(key, value.toString())); // final response = await _makePostRequest(url, stringFormData, { // 'Content-Type': 'application/x-www-form-urlencoded', // 'Token': Environment.ticketToken, // }); // return response; // } // // Future> sendClaimsMessageToApi( // Map formData) async { // final url = Uri.parse('${Environment.apiUrlTicket}/messages/create'); // // Convert formData to Map // Map stringFormData = // formData.map((key, value) => MapEntry(key, value.toString())); // final response = await _makePostRequest(url, stringFormData, { // 'Content-Type': 'application/x-www-form-urlencoded', // 'Token': Environment.ticketToken, // }); // return response; // } // Future?> getSession() async { // try { // final url = Uri.parse('${Environment.apiUrl}session'); // // // No Authorization header here // final response = await _makeGetRequest( // url, // { // 'Content-Type': 'application/json', // }, // ); // // // _makeGetRequest already handles: // // - APP-SIGNATURE // // - 401 redirect // return response; // } catch (e) { // return null; // } // } Future logout() async { try { final url = Uri.parse('${Environment.apiUrl}logout'); await _makePostRequest( url, jsonEncode({}), // empty body { 'Content-Type': 'application/json', 'Authorization': 'Bearer $_token' ?? '', }, ); } catch (_) {} // Clear only mobile storage // if (!isWeb) { await tokenService.clearAll(); print('Secure Storage Cleared'); // } if (context.mounted) { print('context.mounted'); Navigator.pushNamedAndRemoveUntil( context, 'hrLogin', (route) => false, // remove all previous routes ); } } Future> _makePostRequestWithoutFormData( Uri url, String body, Map headers) async { headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y'; final response = await http.post(url, headers: headers, body: body); return _handleResponse(response); } Future> _makeGetRequest( Uri url, Map headers) async { headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y'; final response = await http.get(url, headers: headers); return _handleResponse(response); } Future> _makePostRequest( Uri url, String body, Map headers) async { headers['APP-SIGNATURE'] = 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y'; 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) { if (!_isSessionOutToastShown) { _isSessionOutToastShown = true; await _clearLocalStorageAndRedirect(); } return {}; } else if (response.statusCode == 429) { final body = jsonDecode(response.body); final message = body['message']; ToastHelper.showWarningToast(context, message); return {}; } else { throw Exception('Failed to load data'); } } Future _clearLocalStorageAndRedirect() async { await tokenService.clearAll(); // 🔐 clears flutter_secure_storage ToastHelper.showErrorToast(context, 'Session Out'); if (!context.mounted) return; Navigator.pushNamedAndRemoveUntil( context, 'hrLogin', (route) => false, ); } }