import 'dart:developer'; import 'dart:io'; import 'package:wanisdriver/Provider/public_keys_provider.dart'; import 'package:wanisdriver/Provider/utils_singleton.dart'; import 'package:wanisdriver/config/AppSnackbar.dart'; import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:get/get_core/src/get_main.dart'; import 'package:get/get_navigation/src/snackbar/snackbar.dart'; import 'package:get_it/get_it.dart'; import '../config/api_response.dart'; import '../config/constants/app_constant.dart'; import '../models/DriverLocationDto.dart'; import '../models/DriverSummary.dart'; import '../services/DriverServices.dart'; import '../services/ride_socket_service_manager.dart'; import '../utils/connection.dart'; import 'language_provider.dart'; class DriverProvider extends ChangeNotifier { bool loader=false; driverservice get _driverservice => GetIt.I(); DriverSummary? currentdriversummarydate; Future update_availabilty() async { // Check for internet connection before proceeding if (!(await Connection.checkConnection())) { AppSnackbar.showError("Error", "No Internet Connection"); log("No Internet Connection"); _updateLoaderStatus(false); return false; } _updateLoaderStatus(true); try { // Attempt user sign in through the service final updateresult = await _driverservice.updateavailabilty(); print("🟒🟣🟒🟣 update_availabilty 🟒🟣01🟒🟣 --- ****** / ************** --- ${utils.user!.driver!.available}" ); // Handle successful login if ((updateresult.statusCode == 200 || updateresult.statusCode == 201) && updateresult.data != null) { log("update status successfully !!!"); log("${updateresult.data!.driver!.available}"); utils.updateCurrentUser(updateresult.data!); log("${updateresult.data!.driver!.available}"); print("🟒🟣🟒🟣 update_availabilty 🟒🟣02🟒🟣 --- ****** / ************** --- ${utils.user!.driver!.available}" ); return true; } // Handle different types of errors switch (updateresult.statusCode) { case 401: AppSnackbar.showError("You re not authorized", "Wrong Action."); break; case 400: AppSnackbar.showError("You re data is broken", "please contact the admin to support."); break; default: AppSnackbar.showError("Error", "Change state have error please try again later"); } return false; } catch (e, stackTrace) { // Generic catch for unexpected errors AppSnackbar.showError("Error", "Server Error. Please try again later."); log("Driver provider caught error: $e"); log("Driver provider error stack trace: $stackTrace"); return false; }finally{ _updateLoaderStatus(false); } } Future getdriverlocaiton(int rideId) async { notifyListeners(); try { log("Start getting driver locaiton ############################################"); final APIResponse response = await _driverservice.finddriverlocationby(rideId); if (response.isValidResponse) { log("done getting driver locaiton ############################################"); return response.data!; } else { print("Error: ${response.errorMessage}"); return null; } } catch (e) { print("Exception: $e"); } finally { notifyListeners(); } } Future update_availabilty_always_online() async { // Check for internet connection before proceeding if (!(await Connection.checkConnection())) { AppSnackbar.showError("Error", "No Internet Connection"); log("No Internet Connection"); _updateLoaderStatus(false); return false; } _updateLoaderStatus(true); try { // Attempt user sign in through the service final updateresult = await _driverservice.updateavailabiltyalwaysonline(); print("🟒🟣🟒🟣 update_availabilty 🟒🟣01🟒🟣 --- ****** / ************** --- ${utils.user!.driver!.available}" ); // Handle successful login if ((updateresult.statusCode == 200 || updateresult.statusCode == 201) && updateresult.data != null) { log("update status successfully !!!"); log("${updateresult.data!.driver!.available}"); utils.updateCurrentUser(updateresult.data!); if (publickeys.guardKey(publickeys.pubnubPublishKey, 'pubnubPublishKey') && publickeys.guardKey(publickeys.pubnubSubscribeKey, 'pubnubSubscribeKey')) { await RideSocketServiceManager.startService( username: utils.user!.username!, pubKey: publickeys.pubnubPublishKey!, subKey: publickeys.pubnubSubscribeKey!, ); } else { debugPrint('[DriverProvider] PubNub keys not configured β€” socket not started'); } log("${updateresult.data!.driver!.available}"); print("🟒🟣🟒🟣 update_availabilty 🟒🟣02🟒🟣 --- ****** / ************** --- ${utils.user!.driver!.available}" ); return true; } // Handle different types of errors switch (updateresult.statusCode) { case 401: AppSnackbar.showError("You re not authorized", "Wrong Action."); break; case 400: AppSnackbar.showError("You re data is broken", "please contact the admin to support."); break; default: AppSnackbar.showError("Error", "Change state have error please try again later"); } return false; } catch (e, stackTrace) { // Generic catch for unexpected errors AppSnackbar.showError("Error", "Server Error. Please try again later."); log("Driver provider caught error: $e"); log("Driver provider error stack trace: $stackTrace"); return false; }finally{ _updateLoaderStatus(false); } } Future summarydriver(DateTime date) async { // Check for internet connection before proceeding if (!(await Connection.checkConnection())) { AppSnackbar.showError("Error", "No Internet Connection"); log("No Internet Connection"); return null; } try { // Attempt user sign in through the service final summaryresult = await _driverservice.getdriversummury(date); // Handle successful login if ((summaryresult.statusCode == 200 || summaryresult.statusCode == 201) && summaryresult.data != null) { currentdriversummarydate=summaryresult.data!; log('summarydriver ==> ${currentdriversummarydate?.totalDuration}'); notifyListeners(); return currentdriversummarydate; } // Handle different types of errors switch (summaryresult.statusCode) { case 401: AppSnackbar.showError("You re not authorized", "Wrong Action."); break; case 400: AppSnackbar.showError("You re data is broken", "please contact the admin to support."); break; default: AppSnackbar.showError("Error", "Change state have error please try again later"); } notifyListeners(); return null; } catch (e, stackTrace) { // Generic catch for unexpected errors AppSnackbar.showError("Error", "Server Error. Please try again later."); log("Driver provider caught error: $e"); log("Driver provider error stack trace: $stackTrace"); notifyListeners(); return null; } } void _updateLoaderStatus(bool status) { loader = status; notifyListeners(); } Future updateVehicleImages({ File? carteGrise, File? insurance, List? carImages, List? permisImages, List? cinImages, int? vehicleYear, String? plateNumber, String? cin, String? phone, String? name, }) async { // Check for internet connection before proceeding if (!(await Connection.checkConnection())) { AppSnackbar.showError("Error", "No Internet Connection"); log("No Internet Connection"); return false; } _updateLoaderStatus(true); try { print("πŸš— Starting vehicle images update..."); // Call the service to update vehicle images final updateResult = await _driverservice.updateVehicleImages( carteGrise: carteGrise, insurance: insurance, carImages: carImages, vehicleYear: vehicleYear, plateNumber: plateNumber, cin: cin, phone: phone, name: name, cinImages: cinImages, permisImages: permisImages, ); // Handle successful update if ((updateResult.statusCode == 200 || updateResult.statusCode == 201) && updateResult.data != null) { log("βœ…updated successfully!"); // Update the current user data utils.updateCurrentUser(updateResult.data!); AppSnackbar.showSuccess("Success", "information updated successfully"); return true; } // Handle different types of errors switch (updateResult.statusCode) { case 401: AppSnackbar.showError("Unauthorized", "You are not authorized to perform this action."); break; case 400: AppSnackbar.showError("Bad Request", "Please check your data and try again."); break; case 413: AppSnackbar.showError("File Too Large", "Please reduce the size of your images."); break; default: AppSnackbar.showError("Error", updateResult.errorMessage ?? "Failed to update information"); } return false; } catch (e, stackTrace) { // Generic catch for unexpected errors AppSnackbar.showError("Error", "Server Error. Please try again later."); log("Driver provider caught error: $e"); log("Driver provider error stack trace: $stackTrace"); return false; } finally { _updateLoaderStatus(false); } } }