// ignore_for_file: use_build_context_synchronously import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:http/http.dart' as http; import '../constant/app/api_path_constant.dart'; import '../shared/shared_snack_bar.dart'; import '../constant/enums/app_route_enums.dart'; import 'language_services.dart'; import '../../feature/bell/bell_model.dart'; import '../cache/local_manager.dart'; import '../constant/app/app_constants.dart'; import '../constant/enums/local_keys_enums.dart'; import '../network/network_manager.dart'; class APIServices { Map headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', "Access-Control-Allow-Credentials": "false", "Access-Control-Allow-Headers": "Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale", 'Access-Control-Allow-Origin': "*", 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE', }; Future> getHeaders() async { String? token = LocaleManager.instance.getStringValue(PreferencesKeys.TOKEN); Map headers = { 'Accept': 'application/json', 'Content-Type': 'application/json', "Access-Control-Allow-Credentials": "false", "Access-Control-Allow-Headers": "Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale", 'Access-Control-Allow-Origin': "*", 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE', 'Authorization': token, }; return headers; } Future login(String path, Map loginRequest) async { final url = Uri.https(ApplicationConstants.DOMAIN, path); final headers = await getHeaders(); final response = await http.post(url, headers: headers, body: jsonEncode(loginRequest)); return response.body; } Future sendNotificationToken(String token) async{ String uid = await getUID(); Map body = { "user_id": uid, "app_token": token }; int statusCode = await NetworkManager.instance!.updateDataInServer( APIPathConstants.NOTIFICATION_TOKEN_PATH, body); return statusCode; } Future logOut(BuildContext context) async { showDialog( context: context, builder: (context) => AlertDialog( title: Text(appLocalization(context).log_out_content, textAlign: TextAlign.center), actions: [ TextButton( onPressed: () async { var url = Uri.http(ApplicationConstants.DOMAIN, APIPathConstants.LOGOUT_PATH); final headers = await NetworkManager.instance!.getHeaders(); final response = await http.post(url, headers: headers); if (response.statusCode == 200) { LocaleManager.instance .deleteStringValue(PreferencesKeys.UID); LocaleManager.instance .deleteStringValue(PreferencesKeys.TOKEN); LocaleManager.instance .deleteStringValue(PreferencesKeys.EXP); LocaleManager.instance .deleteStringValue(PreferencesKeys.ROLE); context.goNamed(AppRoutes.LOGIN.name); } else { showErrorTopSnackBarCustom( context, "Error: ${response.statusCode}"); } }, child: Text(appLocalization(context).log_out, style: const TextStyle(color: Colors.red)), ), TextButton( onPressed: () { Navigator.of(context).pop(); }, child: Text(appLocalization(context).cancel_button_content), ), ], )); } Future getUID() async { String uid = LocaleManager.instance.getStringValue(PreferencesKeys.UID); return uid; } Future getUserRole() async { String role = LocaleManager.instance.getStringValue(PreferencesKeys.ROLE); return role; } Future checkTheme() async { String theme = LocaleManager.instance.getStringValue(PreferencesKeys.THEME); return theme; } Future checkLanguage() async { String language = LocaleManager.instance.getStringValue(PreferencesKeys.LANGUAGE_CODE); return language; } Future getBellNotifications(String offset, String pagesize) async { Bell bell = Bell(); final params = {"offset": offset, "page_size": pagesize}; final data = await NetworkManager.instance!.getDataFromServerWithParams( APIPathConstants.BELL_NOTIFICATIONS_PATH, params); if (data != "") { bell = Bell.fromJson(jsonDecode(data)); return bell; } else { return bell; } } Future updateStatusOfNotification(List notificationID) async { Map body = { "event_ids": notificationID, }; int statusCode = await NetworkManager.instance!.updateDataInServer( APIPathConstants.BELL_UPDATE_READ_NOTIFICATIONS_PATH, body); return statusCode; } Future getUserDetail() async { String uid = await getUID(); String? response = await NetworkManager.instance! .getDataFromServer('${APIPathConstants.USER_PATH}/$uid'); return response; } Future updateUserProfile(Map body) async { String uid = await getUID(); int statusCode = await NetworkManager.instance! .updateDataInServer("${APIPathConstants.USER_PROFILE_PATH}/$uid", body); return statusCode; } Future updateUserPassword(Map body) async { String uid = await getUID(); int statusCode = await NetworkManager.instance!.updateDataInServer( "${APIPathConstants.USER_PATH}/$uid/password", body); return statusCode; } Future getAllSettingsNotificationOfDevices() async { String? data = await NetworkManager.instance! .getDataFromServer(APIPathConstants.DEVICE_NOTIFICATION_SETTINGS); return data; } Future updateDeviceNotificationSettings( String thingID, Map data) async { Map body = {"thing_id": thingID, "notifi_settings": data}; int statusCode = await NetworkManager.instance!.updateDataInServer( APIPathConstants.DEVICE_NOTIFICATION_SETTINGS, body); return statusCode; } Future getDashBoardDevices() async { String? data = await NetworkManager.instance! .getDataFromServer(APIPathConstants.DASHBOARD_DEVICES); return data; } Future setupDeviceNotification(String thingID, String deviceName) async { Map body = { "thing_id": thingID, "alias": deviceName, "notifi_settings": { "001": 1, "002": 1, "003": 1, "004": 1, "005": 1, "006": 1, "101": 1, "102": 1, "103": 1, "104": 1, } }; int statusCode = await NetworkManager.instance!.updateDataInServer( APIPathConstants.DEVICE_NOTIFICATION_SETTINGS, body); return statusCode; } Future getAllProvinces() async { String? data = await NetworkManager.instance! .getDataFromServer(APIPathConstants.PROVINCES_PATH); return data; } Future getProvincesByName(String name) async { final params = {'name': name}; String? data = await NetworkManager.instance! .getDataFromServerWithParams(APIPathConstants.PROVINCES_PATH, params); return data; } Future getProvinceByID(String provinceID) async { String data = await NetworkManager.instance! .getDataFromServer("${APIPathConstants.PROVINCES_PATH}/$provinceID"); return data; } Future getAllDistricts(String provinceID) async { final params = {"parent": provinceID}; String? data = await NetworkManager.instance! .getDataFromServerWithParams(APIPathConstants.DISTRICTS_PATH, params); return data; } Future getDistrictsByName(String districtName) async { final params = {"name": districtName}; String? data = await NetworkManager.instance! .getDataFromServerWithParams(APIPathConstants.DISTRICTS_PATH, params); return data; } Future getDistrictByID(String districtID) async { String? data = await NetworkManager.instance! .getDataFromServer("${APIPathConstants.DISTRICTS_PATH}/$districtID"); return data; } Future getAllWards(String districtID) async { final params = {'parent': districtID}; String? data = await NetworkManager.instance! .getDataFromServerWithParams(APIPathConstants.WARDS_PATH, params); return data; } Future getWarsdByName(String wardName) async { final params = {"name": wardName}; String? data = await NetworkManager.instance! .getDataFromServerWithParams(APIPathConstants.WARDS_PATH, params); return data; } Future getWardByID(String wardID) async { String? data = await NetworkManager.instance! .getDataFromServer("${APIPathConstants.WARDS_PATH}/$wardID"); return data; } Future confirmFakeFireByUser(String thingID) async { Map body = { "state": 3, "note": "Người dùng xác nhận cháy giả!" }; int statusCode = await NetworkManager.instance! .updateDataInServer("${APIPathConstants.DEVICE_PATH}/$thingID", body); return statusCode; } Future getOwnerDevices() async { String? data = await NetworkManager.instance! .getDataFromServer(APIPathConstants.DEVICE_PATH); return data; } Future getOwnerDevieByState(Map params) async { String? data = await NetworkManager.instance! .getDataFromServerWithParams(APIPathConstants.DEVICE_PATH, params); return data; } Future createDeviceByAdmin(Map body) async { int? statusCode = await NetworkManager.instance! .createDataInServer(APIPathConstants.DEVICE_PATH, body); return statusCode; } Future registerDevice(Map body) async { int? statusCode = await NetworkManager.instance! .createDataInServer(APIPathConstants.DEVICE_REGISTER_PATH, body); return statusCode; } Future deleteDeviceByAdmin(String thingID) async { int statusCode = await NetworkManager.instance! .deleteDataInServer("${APIPathConstants.DEVICE_PATH}/$thingID"); return statusCode; } Future unregisterDevice(Map body) async { int statusCode = await NetworkManager.instance! .createDataInServer(APIPathConstants.DEVICE_UNREGISTER_PATH, body); return statusCode; } Future getDeviceInfomation(String thingID) async { String? response = await NetworkManager.instance! .getDataFromServer("${APIPathConstants.DEVICE_PATH}/$thingID"); return response; } Future getAllGroups() async { String? body = await NetworkManager.instance! .getDataFromServer(APIPathConstants.ALL_GROUPS_PATH); return body; } Future createGroup(Map body) async { int? statusCode = await NetworkManager.instance! .createDataInServer(APIPathConstants.GROUPS_PATH, body); return statusCode; } Future updateGroup(Map body, String groupID) async { int? statusCode = await NetworkManager.instance! .updateDataInServer("${APIPathConstants.GROUPS_PATH}/$groupID", body); return statusCode; } Future joinGroup(String groupID, Map body) async { int? statusCode = await NetworkManager.instance! .createDataInServer(APIPathConstants.JOIN_GROUP_PATH, body); return statusCode; } Future deleteGroup(String groupID) async { int? statusCode = await NetworkManager.instance! .deleteDataInServer("${APIPathConstants.GROUPS_PATH}/$groupID"); return statusCode; } Future getGroupDetail(String groupID) async { String? body = await NetworkManager.instance! .getDataFromServer("${APIPathConstants.GROUPS_PATH}/$groupID"); return body; } Future approveGroup(Map body) async { int statusCode = await NetworkManager.instance! .createDataInServer(APIPathConstants.APPROVE_GROUP_PATH, body); return statusCode; } Future deleteUserInGroup(String groupID, String userID) async { int? statusCode = await NetworkManager.instance!.deleteDataInServer( "${APIPathConstants.GROUPS_PATH}/$groupID/users/$userID"); return statusCode; } Future deleteDeviceInGroup(String groupID, String thingID) async { int? statusCode = await NetworkManager.instance!.deleteDataInServer( "${APIPathConstants.GROUPS_PATH}/$groupID/devices/$thingID"); return statusCode; } Future updateDeviceAlias(Map body) async { int? statusCode = await NetworkManager.instance!.updateDataInServer( APIPathConstants.DEVICE_NOTIFICATION_SETTINGS, body); return statusCode; } Future addDeviceToGroup( String groupID, Map body) async { int? statusCode = await NetworkManager.instance!.createDataInServer( "${APIPathConstants.GROUPS_PATH}/$groupID/things", body); return statusCode; } Future updateOwnerDevice( String thingID, Map body) async { int? statusCode = await NetworkManager.instance! .updateDataInServer("${APIPathConstants.DEVICE_PATH}/$thingID", body); return statusCode; } Future getLogsOfDevice( String thingID, Map params) async { String? body = await NetworkManager.instance! .getDataFromServerWithParams(APIPathConstants.DEVICE_LOGS_PATH, params); return body; } }