import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:service/constant/box_name.dart'; import 'package:service/constant/colors.dart'; import 'package:service/constant/links.dart'; import 'package:service/controller/functions/crud.dart'; import 'package:service/controller/mainController/pages/driver_page.dart'; import 'package:service/main.dart'; import 'package:service/views/widgets/my_dialog.dart'; import 'package:url_launcher/url_launcher.dart'; import '../../print.dart'; import 'pages/passengers_page.dart'; class MainController extends GetxController { final formKey = GlobalKey(); bool isLoading = false; final passengerPhoneController = TextEditingController(); final driverPhoneController = TextEditingController(); final notesController = TextEditingController(); final carplateController = TextEditingController(); TextEditingController colorController = TextEditingController(); TextEditingController makeController = TextEditingController(); TextEditingController modelController = TextEditingController(); TextEditingController expirationDateController = TextEditingController(); TextEditingController yearController = TextEditingController(); TextEditingController ownerController = TextEditingController(); TextEditingController carOwnerWorkController = TextEditingController(); TextEditingController driverNameController = TextEditingController(); TextEditingController nationalIdController = TextEditingController(); TextEditingController birthDateController = TextEditingController(); TextEditingController licenseTypeController = TextEditingController(); TextEditingController phoneController = TextEditingController(); TextEditingController phoneCarController = TextEditingController(); TextEditingController carNumberController = TextEditingController(); TextEditingController manufactureYearController = TextEditingController(); TextEditingController carModelController = TextEditingController(); TextEditingController carTypeController = TextEditingController(); TextEditingController siteCarController = TextEditingController(); TextEditingController siteDriverController = TextEditingController(); TextEditingController registrationDateController = TextEditingController(); Map passengerData = {}; Map driverData = {}; List filteredDrivers = []; var color = ''.obs; var colorHex = ''.obs; searchPassengerByPhone() async { if (formKey.currentState!.validate()) { await getPassengersByPhone(); Get.back(); Get.to(() => PassengersPage()); } } void searchDrivers(String query) { if (query.isEmpty) { filteredDrivers = driverNotCompleteRegistration; update(); } else { filteredDrivers = driverNotCompleteRegistration .where((driver) => driver['phone_number'] .toString() .toLowerCase() .contains(query.toLowerCase())) .toList(); update(); } } Future makePhoneCall(String phoneNumber) async { final Uri launchUri = Uri( scheme: 'tel', path: phoneNumber, ); await launchUrl(launchUri); } void launchCommunication( String method, String contactInfo, String message) async { String url; if (Platform.isIOS) { switch (method) { case 'phone': url = 'tel:$contactInfo'; break; case 'sms': url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}'; break; case 'whatsapp': url = 'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; break; case 'email': url = 'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}'; break; default: return; } } else if (Platform.isAndroid) { switch (method) { case 'phone': url = 'tel:$contactInfo'; break; case 'sms': url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}'; break; case 'whatsapp': // Check if WhatsApp is installed final bool whatsappInstalled = await canLaunchUrl(Uri.parse('whatsapp://')); if (whatsappInstalled) { url = 'whatsapp://send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; } else { // Provide an alternative action, such as opening the WhatsApp Web API url = 'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; } break; case 'email': url = 'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}'; break; default: return; } } else { return; } if (await canLaunchUrl(Uri.parse(url))) { await launchUrl(Uri.parse(url)); } else {} } List driverNotCompleteRegistration = []; getDriverNotCompleteRegistration() async { var res = await CRUD() .get(link: AppLink.getDriverNotCompleteRegistration, payload: {}); if (res != 'failure') { var d = jsonDecode(res)['message']; driverNotCompleteRegistration = d; filteredDrivers = driverNotCompleteRegistration; update(); } else { Get.snackbar(res, ''); } } List newDriverRegister = []; getNewDriverRegister() async { var res = await CRUD().get(link: AppLink.getNewDriverRegister, payload: {}); if (res != 'failure') { var d = jsonDecode(res)['message']; newDriverRegister = d; update(); } else { Get.snackbar(res, ''); } } addWelcomeCall(String driveId) async { var res = await CRUD().post(link: AppLink.addWelcomeDriverNote, payload: { "driverId": driveId, "notes": notesController.text, }); if (res != 'failue') { Get.snackbar('Success'.tr, '', backgroundColor: AppColor.greenColor); } } String selectedStatus = "I'm not ready yet".tr; List passengerNotCompleteRegistration = []; getPassengerNotCompleteRegistration() async { var res = await CRUD() .get(link: AppLink.getPassengersNotCompleteRegistration, payload: {}); if (res != 'failure') { var d = jsonDecode(res)['message']; passengerNotCompleteRegistration = d; update(); } else { Get.snackbar(res, ''); } } void setSelectedStatus(String status) { selectedStatus = status; update(); } final List statusOptions = [ "I'm not ready yet".tr, "I don't have a suitable vehicle".tr, "I'll register when the app is fully launched".tr, "I need more help understanding the app".tr, "My documents have expired".tr, ]; List carPlateNotEdit = []; getCarPlateNotEdit() async { var res = await CRUD().get(link: AppLink.getCarPlateNotEdit, payload: {}); if (res != 'failure') { var d = jsonDecode(res)['message']; carPlateNotEdit = d; update(); } else { MyDialog().getDialog('No Car found yet'.tr, 'thanks'.tr, const SizedBox(), () { Get.back(); }); } } List driverWithoutCar = []; getdriverWithoutCar() async { var res = await CRUD().get(link: AppLink.getdriverWithoutCar, payload: {}); if (res != 'failure') { var d = jsonDecode(res)['message']; driverWithoutCar = d; update(); } else { MyDialog().getDialog('No Car found yet'.tr, 'thanks'.tr, const SizedBox(), () { Get.back(); }); } } Future addRegistrationCarEgyptHandling({ required String driverId, required String carPlate, required String color, required String colorHex, required String year, required String make, required String model, required String expirationDate, required String owner, }) async { try { isLoading = true; update(); var payload = { 'driverID': driverId, 'vin': 'vin', 'car_plate': carPlate, 'make': make, 'model': model, 'year': year, 'expiration_date': expirationDate, 'color': color, 'owner': owner, 'color_hex': colorHex, 'address': 'addressCar', 'displacement': 'displacement', 'fuel': 'fuel', 'registration_date': '2024-09-06', }; Log.print('Payload: $payload'); var res = await CRUD().post(link: AppLink.addCartoDriver, payload: payload); isLoading = false; update(); var status = jsonDecode(res); Log.print('res: $res'); Log.print('status: $status'); if (status['status'] == 'success') { await Future.wait([ CRUD().post( link: '${AppLink.seferAlexandriaServer}/ride/RegisrationCar/add.php', payload: payload), CRUD().post( link: '${AppLink.seferGizaServer}/ride/RegisrationCar/add.php', payload: payload), ]); Get.snackbar('Success', 'Registration successful', backgroundColor: AppColor.greenColor); Get.back(); } else { Log.print('Error: Unexpected status: ${status['status']}'); Get.snackbar('Error', 'Registration failed', backgroundColor: Colors.red); } } catch (e) { Log.print('Error: $e'); Get.snackbar('Error', 'An error occurred during registration', backgroundColor: Colors.red); } } editCarPlateNotEdit( String driverId, String carPlate, String color, String colorHex, String year, String make, String model, String expirationDate, String owner, ) async { var res = await CRUD().post(link: AppLink.editCarPlate, payload: { "driverId": driverId, "carPlate": carPlate, "color": color, "color_hex": colorHex, "make": make, "year": year, "model": model, "expiration_date": expirationDate.toString(), "owner": owner, "employee": storage.read(key: 'name').toString(), }); Log.print('res: ${res}'); if (res != 'failure') { // Get.snackbar(res, '', backgroundColor: AppColor.greenColor); Get.back(); carplateController.clear(); yearController.clear(); makeController.clear(); modelController.clear(); ownerController.clear(); await getCarPlateNotEdit(); update(); } else { Get.snackbar(res, '', backgroundColor: AppColor.redColor); } } // editCarPlateNotEdit(String driverId, carPlate) async { // var res = await CRUD().post(link: AppLink.editCarPlate, payload: { // "driverId": driverId, // "carPlate": carPlate, // }); // if (res != 'failure') { // Get.snackbar(res, '', backgroundColor: AppColor.greenColor); // carplateController.clear(); // await getCarPlateNotEdit(); // update(); // } else { // Get.snackbar(res, '', backgroundColor: AppColor.redColor); // } // } saveNoteForDriverNotCompleteRegistration(String phone, editor, note) async { var res = await CRUD().post( link: AppLink.addNotesDriver, payload: {"phone": phone, "editor": editor, "note": note}); if (res != 'failure') { Get.snackbar(res, '', backgroundColor: AppColor.greenColor); notesController.clear(); } else { Get.snackbar(res, '', backgroundColor: AppColor.redColor); } } saveNoteForPassengerNotCompleteRegistration( String phone, editor, note) async { var res = await CRUD().post( link: AppLink.addNotesPassenger, payload: {"phone": phone, "editor": editor, "note": note}); if (res != 'failure') { Get.snackbar(res, '', backgroundColor: AppColor.greenColor); notesController.clear(); } else { Get.snackbar(res, '', backgroundColor: AppColor.redColor); } } searchDriverByPhone() async { if (formKey.currentState!.validate()) { await getDriverByPhone(); Get.back(); Get.to(() => DriverPage()); } } getPassengersByPhone() async { var res = await CRUD().get( link: AppLink.getPassengersByPhone, payload: {"phone": '+2${passengerPhoneController.text}'}); if (res != 'failure') { var d = jsonDecode(res); passengerData = d; update(); } } getDriverByPhone() async { var res = await CRUD().get( link: AppLink.getDriverByPhone, payload: {"phone": '+2${driverPhoneController.text}'}); if (res != 'failure') { var d = jsonDecode(res); driverData = d; update(); } } }