import 'dart:convert';
import 'dart:io';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
import 'package:SEFER/views/home/Captin/home_captain/widget/call_page.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/controller/functions/toast.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';

import '../../constant/api_key.dart';
import '../../constant/box_name.dart';
import '../../constant/colors.dart';
import '../../constant/links.dart';
import '../../constant/style.dart';
import '../../main.dart';
import '../../views/Rate/rate_captain.dart';
import '../../views/home/Captin/home_captain/home_captin.dart';
import '../../views/home/Captin/orderCaptin/order_speed_request.dart';
import '../../views/home/map_page_passenger.dart';
import '../../views/home/map_widget.dart/call_passenger_page.dart';
import '../../views/home/profile/promos_passenger_page.dart';
import '../../views/home/Captin/orderCaptin/order_request_page.dart';
import '../home/map_passenger_controller.dart';
import '../payment/payment_controller.dart';
import 'local_notification.dart';

class FirebaseMessagesController extends GetxController {
  final fcmToken = FirebaseMessaging.instance;

  List<String> tokens = [];
  List dataTokens = [];
  late String driverID;
  late String driverToken;
  NotificationSettings? notificationSettings;

  Future<void> getNotificationSettings() async {
    // Get the current notification settings
    NotificationSettings? notificationSettings =
        await FirebaseMessaging.instance.getNotificationSettings();
    print(
        'Notification authorization status: ${notificationSettings.authorizationStatus}');

    // Call the update function if needed
    update();
  }

  Future<void> requestFirebaseMessagingPermission() async {
    FirebaseMessaging messaging = FirebaseMessaging.instance;

    // Check if the platform is Android
    if (Platform.isAndroid) {
      // Request permission for Android
      await messaging.requestPermission();
    } else if (Platform.isIOS) {
      // Request permission for iOS
      NotificationSettings settings = await messaging.requestPermission(
        alert: true,
        announcement: true,
        badge: true,
        carPlay: true,
        criticalAlert: true,
        provisional: false,
        sound: true,
      );
      print('User granted permission: ${settings.authorizationStatus}');
      messaging.setForegroundNotificationPresentationOptions(
          alert: true, badge: true, sound: true);
    }
  }

  Future getTokens() async {
    String? basicAuthCredentials =
        await storage.read(key: BoxName.basicAuthCredentials);
    var res = await http.post(
      Uri.parse(AppLink.getTokens),
      headers: {
        'Authorization':
            'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}',
      },
      body: {},
    );
    // print(res.body);
    var jsonResponse = jsonDecode(res.body);
    // print(jsonResponse);
    if (jsonResponse['status'] == 'success') {
      dataTokens = jsonResponse['data'];
      for (var i = 0; i < dataTokens.length; i++) {
        tokens.add(jsonResponse['data'][i]['token']);
      }
      box.write(BoxName.tokens, tokens);
      print(box.read(BoxName.tokens));
    } else {
      Get.defaultDialog(title: "Warning", middleText: "Server Error");
    }
  }

  Future getToken() async {
    fcmToken.getToken().then((token) {
      if (box.read(BoxName.email) == null) {
        box.write(BoxName.tokenDriver, token);
      } else {
        box.write(BoxName.tokenFCM, token);
      }
      print(token);
    });

    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      // If the app is in the background or terminated, show a system tray message
      RemoteNotification? notification = message.notification;
      AndroidNotification? android = notification?.android;
      // if (notification != null && android != null) {
      if (message.data.isNotEmpty && message.notification != null) {
        fireBaseTitles(message);
      }
    });
  }

  void fireBaseTitles(RemoteMessage message) {
    if (message.notification!.title! == 'Order') {
      if (Platform.isAndroid) {
        NotificationController().showNotification('Order', '', 'order');
      }
      var myListString = message.data['DriverList'];
      // var points = message.data['PolylineJson'];

      var myList = jsonDecode(myListString) as List<dynamic>;
      // var myPoints = jsonDecode(points) as List<dynamic>;
      driverToken = myList[14].toString();
      // This is for location using and uploading status
      Get.put(HomeCaptainController()).changeRideId();
      update();
      // print('driverToken==============$driverToken');
      Get.to(() => OrderRequestPage(), arguments: {
        'myListString': myListString,
        'DriverList': myList,
        // 'PolylineJson': myPoints,
        'body': message.notification!.body
      });
    } else if (message.notification!.title! == 'Apply Ride') {
      var passengerList = message.data['passengerList'];

      var myList = jsonDecode(passengerList) as List<dynamic>;
      driverID = myList[2].toString();

      NotificationController().showNotification(
          'Apply Order'.tr, 'Driver Applied the Ride for You'.tr, 'order1');
      // driverAppliedTripSnakBar();
    } else if (message.notification!.title! == 'Promo') {
      NotificationController()
          .showNotification('Promo', 'Show latest promo'.tr, 'promo');
      Get.to(const PromosPassengerPage());
    } else if (message.notification!.title == 'Cancel Trip') {
      NotificationController().showNotification(
          'Cancel Trip'.tr, 'Passenger Cancel Trip'.tr, 'cancel');
      cancelTripDialog();
    } else if (message.notification!.title! == 'DriverIsGoingToPassenger') {
      Get.find<MapPassengerController>().isDriverInPassengerWay = true;
      Get.find<MapPassengerController>().update();
      NotificationController().showNotification('Driver is Going To You'.tr,
          'Please stay on the picked point.'.tr, 'tone1');
      // Get.snackbar('Driver is Going To Passenger', '',
      //     backgroundColor: AppColor.greenColor);
    } else if (message.notification!.title! == 'message From passenger') {
      NotificationController()
          .showNotification('message From passenger'.tr, ''.tr, 'tone2');
      passengerDialog(message.notification!.body!);

      update();
    } else if (message.notification!.title! == 'RideIsBegin') {
      Get.find<MapPassengerController>().getBeginRideFromDriver();
      // Get.snackbar('RideIsBegin', '', backgroundColor: AppColor.greenColor);
      box.write(BoxName.passengerWalletTotal, '0');
      NotificationController()
          .showNotification('Trip is Begin'.tr, ''.tr, 'start');
      update();
    } else if (message.notification!.title! == 'Hi ,I will go now') {
      // Get.snackbar('Hi ,I will go now', '',
      //     backgroundColor: AppColor.greenColor);
      NotificationController().showNotification(
          'Passenger come to you'.tr, 'Hi ,I will go now'.tr, 'tone2');
      update();
    } else if (message.notification!.title! == 'Hi ,I Arrive your site') {
      NotificationController()
          .showNotification('Hi ,I Arrive your site'.tr, ''.tr, 'tone2');
      driverArrivePassengerDialoge();

      update();
    } else if (message.notification!.title! == 'Driver Finish Trip') {
      var myListString = message.data['passengerList'];
      var driverList = jsonDecode(myListString) as List<dynamic>;
      NotificationController().showNotification(
          'Driver Finish Trip'.tr,
          'you will pay to Driver'.tr + ' ${driverList[3].toString()} \$'.tr,
          'tone1');
      Get.find<MapPassengerController>().tripFinishedFromDriver();
      // if (Get.find<PaymentController>().isCashChecked == false &&
      //     Get.find<PaymentController>().isWalletChecked == true) {
      //   // driverFinishTripDialoge(driverList);
      // } else {
      Get.to(() => RateDriverFromPassenger(), arguments: {
        'driverId': driverList[0].toString(),
        'rideId': driverList[1].toString(),
        'price': driverList[3].toString()
      });
      // }
    } else if (message.notification!.title! == 'Call Income') {
      try {
        var myListString = message.data['passengerList'];
        var driverList = jsonDecode(myListString) as List<dynamic>;
        // if (Platform.isAndroid) {
        NotificationController().showNotification(
          'Call Income'.tr,
          message.notification!.body!,
          'iphone_ringtone',
        );
        // }
        // Assuming GetMaterialApp is initialized and context is valid for navigation
        Get.to(() => PassengerCallPage(
              channelName: driverList[1].toString(),
              token: driverList[0].toString(),
              remoteID: driverList[2].toString(),
            ));
      } catch (e) {
        print('Error navigating to PassengerCallPage: $e');
      }
    } else if (message.notification!.title! == 'Call Income from Passenger') {
      try {
        var myListString = message.data['passengerList'];
        var driverList = jsonDecode(myListString) as List<dynamic>;
        // if (Platform.isAndroid) {
        NotificationController().showNotification(
          'Call Income'.tr,
          message.notification!.body!,
          'iphone_ringtone',
        );
        // }
        // Assuming GetMaterialApp is initialized and context is valid for navigation
        Get.to(() => CallPage(
            // channelName: driverList[1].toString(),
            // token: driverList[0].toString(),
            // remoteID: driverList[2].toString(),
            ));
      } catch (e) {
        print('Error navigating to PassengerCallPage: $e');
      }
    } else if (message.notification!.title! == 'Call End') {
      try {
        var myListString = message.data['passengerList'];
        var driverList = jsonDecode(myListString) as List<dynamic>;
        if (Platform.isAndroid) {
          NotificationController().showNotification(
            'Call End'.tr,
            message.notification!.body!,
            'tone2',
          );
        }
        // Assuming GetMaterialApp is initialized and context is valid for navigation
        Get.off(const CallPage());
      } catch (e) {
        print('Error navigating to PassengerCallPage: $e');
      }
    } else if (message.notification!.title! == 'Driver Cancel Your Trip') {
      // Get.snackbar(
      //     'You will be pay the cost to driver or we will get it from you on next trip'
      //         .tr,
      //     'message',
      //     backgroundColor: AppColor.redColor);
      if (Platform.isAndroid) {
        NotificationController().showNotification(
            'Driver Cancel Your Trip'.tr,
            'you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet'
                .tr,
            'cancel');
      }

      Get.find<MapPassengerController>().restCounter();
      Get.offAll(const MapPagePassenger());
    } else if (message.notification!.title! == 'Order Applied') {
      Get.snackbar(
        "The order has been accepted by another driver."
            .tr, // Corrected grammar
        "Be more mindful next time to avoid dropping orders."
            .tr, // Improved sentence structure
        backgroundColor: AppColor.yellowColor,
        snackPosition: SnackPosition.BOTTOM,
      );
    } else if (message.notification!.title! == 'OrderSpeed') {
      var myListString = message.data['DriverList'];
      // var points = message.data['PolylineJson'];

      var myList = jsonDecode(myListString) as List<dynamic>;
      // var myPoints = jsonDecode(points) as List<dynamic>;
      driverToken = myList[14].toString();
      update();
      // print('driverToken==============$driverToken');
      Get.to(() => OrderSpeedRequest(), arguments: {
        'myListString': myListString,
        'DriverList': myList,
        // 'PolylineJson': myPoints,
        'body': message.notification!.body
      });
    } else if (message.notification!.title! == 'Order Applied') {
      NotificationController().showNotification(
          'The order Accepted by another Driver'.tr,
          'We regret to inform you that another driver has accepted this order.'
              .tr,
          'order');
    }
  }

  SnackbarController driverAppliedTripSnakBar() {
    return Get.snackbar(
      'Driver Applied the Ride for You'.tr,
      '',
      colorText: AppColor.greenColor,
      duration: const Duration(seconds: 3),
      snackPosition: SnackPosition.TOP,
      titleText: Text(
        'Applied'.tr,
        style: const TextStyle(color: AppColor.redColor),
      ),
      messageText: Text(
        'Driver Applied the Ride for You'.tr,
        style: AppStyle.title,
      ),
      icon: const Icon(Icons.approval),
      shouldIconPulse: true,
      margin: const EdgeInsets.all(16),
      padding: const EdgeInsets.all(16),
    );
  }

  Future<dynamic> cancelTripDialog() {
    return Get.defaultDialog(
        barrierDismissible: false,
        title: 'Passenger Cancel Trip'.tr,
        middleText: '',
        confirm: MyElevatedButton(
            title: 'Ok'.tr,
            onPressed: () {
              Get.offAll(HomeCaptain());
            }));
  }

  Future<dynamic> driverArrivePassengerDialoge() {
    return Get.defaultDialog(
        barrierDismissible: false,
        title: 'Hi ,I Arrive your site'.tr,
        middleText: 'Please go to Car Driver'.tr,
        confirm: MyElevatedButton(
            title: 'Ok I will go now.'.tr,
            onPressed: () {
              FirebaseMessagesController().sendNotificationToPassengerToken(
                  'Hi ,I will go now'.tr,
                  'I will go now'.tr,
                  Get.find<MapPassengerController>().driverToken, []);
              Get.find<MapPassengerController>()
                  .startTimerDriverWaitPassenger5Minute();

              Get.back();
            }));
  }

  Future<dynamic> passengerDialog(String message) {
    return Get.defaultDialog(
        barrierDismissible: false,
        title: 'message From passenger'.tr,
        titleStyle: AppStyle.title,
        middleTextStyle: AppStyle.title,
        middleText: message.tr,
        confirm: MyElevatedButton(
            title: 'Ok'.tr,
            onPressed: () {
              //   FirebaseMessagesController().sendNotificationToPassengerToken(
              //       'Hi ,I will go now'.tr,
              //       'I will go now'.tr,
              //       Get.find<MapPassengerController>().driverToken, []);
              //   Get.find<MapPassengerController>()
              //       .startTimerDriverWaitPassenger5Minute();

              Get.back();
            }));
  }

  Future<dynamic> driverFinishTripDialoge(List<dynamic> driverList) {
    return Get.defaultDialog(
        title: 'Driver Finish Trip'.tr,
        content: const DriverTipWidget(),
        confirm: MyElevatedButton(
          title: 'Yes'.tr,
          onPressed: () async {
            var tip = (Get.find<MapPassengerController>().totalPassenger) *
                (double.parse(box.read(BoxName.tipPercentage.toString())));
            var res = await CRUD().post(link: AppLink.addTips, payload: {
              'passengerID': box.read(BoxName.passengerID),
              'driverID': driverList[0].toString(),
              'rideID': driverList[1].toString(),
              'tipAmount': tip.toString(),
            });
            await CRUD().post(link: AppLink.addPassengersWallet, payload: {
              'passenger_id': box.read(BoxName.passengerID).toString(),
              'balance': ((-1) * tip).toString()
            });

            await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
              'driverID': driverList[0].toString(),
              'paymentID': '${Get.find<MapPassengerController>().rideId}tip',
              'amount': (tip * 100).toString(),
              'paymentMethod': 'visa-tip',
            });

            if (res != 'failure') {
              FirebaseMessagesController().sendNotificationToAnyWithoutData(
                'You Have Tips',
                '${'${tip.toString()}\$${' tips\nTotal is'.tr}'} ${tip + (Get.find<MapPassengerController>().totalPassenger)}',
                driverList[2].toString(),
              );
            }
            Get.to(() => RateDriverFromPassenger(), arguments: {
              'driverId': driverList[0].toString(),
              'rideId': driverList[1].toString(),
              'price': driverList[3].toString()
            });
          },
          kolor: AppColor.greenColor,
        ),
        cancel: MyElevatedButton(
          title: 'No,I want'.tr,
          onPressed: () {
            Get.to(() => RateDriverFromPassenger(), arguments: {
              'driverId': driverList[0].toString(),
              'rideId': driverList[1].toString(),
              'price': driverList[3].toString()
            });
          },
          kolor: AppColor.redColor,
        ));
  }

  void sendNotificationAll(String title, body) async {
    // Get the token you want to subtract.
    String token = box.read(BoxName.tokenFCM);
    tokens = box.read(BoxName.tokens);
    // Subtract the token from the list of tokens.
    tokens.remove(token);

    // Save the list of tokens back to the box.
    // box.write(BoxName.tokens, tokens);
    tokens = box.read(BoxName.tokens);
    // print(tokens);
    for (var i = 0; i < tokens.length; i++) {
      http
          .post(Uri.parse('https://fcm.googleapis.com/fcm/send'),
              headers: <String, String>{
                'Content-Type': 'application/json',
                'Authorization': 'key=${AK.serverAPI}'
              },
              body: jsonEncode({
                'notification': <String, dynamic>{
                  'title': title,
                  'body': body,
                  'sound': 'start.wav'
                },
                'priority': 'high',
                'data': <String, dynamic>{
                  'click_action': 'FLUTTER_NOTIFICATION_CLICK',
                  'id': '1',
                  'status': 'done'
                },
                'to': tokens[i],
              }))
          .whenComplete(() {})
          .catchError((e) {
        print('sendNotification() error: $e');
      });
    }
  }

  //   for (var i = 0; i < tokens.length; i++) {
  //     http
  //         .post(Uri.parse('https://fcm.googleapis.com/fcm/send'),
  //             headers: <String, String>{
  //               'Content-Type': 'application/json',
  //               'Authorization': 'key=${storage.read(key: BoxName.serverAPI}'
  //             },
  //             body: jsonEncode({
  //               'notification': <String, dynamic>{
  //                 'title': title,
  //                 'body': body,
  //                 'sound': 'true'
  //               },
  //               'priority': 'high',
  //               'data': <String, dynamic>{
  //                 'click_action': 'FLUTTER_NOTIFICATION_CLICK',
  //                 'id': '1',
  //                 'status': 'done'
  //               },
  //               'to': tokens[i],
  //             }))
  //         .whenComplete(() {})
  //         .catchError((e) {
  //       print('sendNotification() error: $e');
  //     });
  //   }
  // }

  void sendNotificationToPassengerToken(
      String title, body, token, List<String> map) async {
    try {
      final response = await http.post(
        Uri.parse('https://fcm.googleapis.com/fcm/send'),
        headers: <String, String>{
          'Content-Type': 'application/json',
          'Authorization': 'key=${AK.serverAPI}'
        },
        body: jsonEncode({
          'notification': <String, dynamic>{
            'title': title,
            'body': body,
            'sound': 'tone2.wav'
          },
          'data': {
            'passengerList': map,
          },
          'priority': 'high',
          'to': token,
        }),
      );

      if (response.statusCode == 200) {
        // Notification sent successfully
        print('Notification sent successfully');
      } else {
        // Handle error response
        print(
            'Failed to send notification. Status code: ${response.statusCode}');
      }
    } catch (e) {
      // Handle other exceptions
      print('sendNotification() error: $e');
    }
  }

  void sendNotificationToAnyWithoutData(
      String title, String body, String token) async {
    try {
      final response = await http.post(
        Uri.parse('https://fcm.googleapis.com/fcm/send'),
        headers: <String, String>{
          'Content-Type': 'application/json',
          'Authorization': 'key=${AK.serverAPI}'
        },
        body: jsonEncode({
          'notification': <String, dynamic>{
            'title': title,
            'body': body,
            'sound': 'promo.wav'
          },
          'data': <String, dynamic>{
            'click_action': 'FLUTTER_NOTIFICATION_CLICK',
            'id': '1',
            'status': 'done'
          },
          'priority': 'high',
          'to': token,
        }),
      );

      if (response.statusCode == 200) {
        // Notification sent successfully
        print('Notification sent successfully');
      } else {
        // Handle error response
        print(
            'Failed to send notification. Status code: ${response.statusCode}');
      }
    } catch (e) {
      // Handle other exceptions
      print('sendNotification() error: $e');
    }
  }

  void sendNotificationToDriverMAP(
      String title, String body, String token, List<String> data) async {
    try {
      final response = await http.post(
        Uri.parse('https://fcm.googleapis.com/fcm/send'),
        headers: <String, String>{
          'Content-Type': 'application/json',
          'Authorization': 'key=${AK.serverAPI}'
        },
        body: jsonEncode({
          'notification': <String, dynamic>{
            'title': title,
            'body': body,
            // 'sound': 'tone2.wav',
            'sound': 'order.wav'
          },
          'data': {
            'DriverList': data,
          },
          'priority': 'high',
          'to': token,
        }),
      );

      if (response.statusCode == 200) {
        // Notification sent successfully
        print('Notification sent successfully');
      } else {
        // Handle error response
        print(
            'Failed to send notification. Status code: ${response.statusCode}');
      }
    } catch (e) {
      // Handle other exceptions
      print('sendNotification() error: $e');
    }
  }

  void sendNotificationToDriverMapPolyline(String title, String body,
      String token, List<String> data, String polylineJson) async {
    try {
      final response = await http.post(
        Uri.parse('https://fcm.googleapis.com/fcm/send'),
        headers: <String, String>{
          'Content-Type': 'application/json',
          'Authorization': 'key=${AK.serverAPI}'
        },
        body: jsonEncode({
          'notification': <String, dynamic>{
            'title': title,
            'body': body,
            // 'sound': 'tone2.wav',
            'sound': 'order.wav'
          },
          'data': {
            'DriverList': data,
            'PolylineJson': polylineJson,
          },
          'priority': 'high',
          'to': token,
        }),
      );

      if (response.statusCode == 200) {
        // Notification sent successfully
        print('Notification sent successfully');
      } else {
        // Handle error response
        print(
            'Failed to send notification. Status code: ${response.statusCode}');
      }
    } catch (e) {
      // Handle other exceptions
      print('sendNotification() error: $e');
    }
  }
}

class DriverTipWidget extends StatelessWidget {
  const DriverTipWidget({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return GetBuilder<MapPassengerController>(builder: (controller) {
      return Column(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          // Text(
          //     '${'Your fee is '.tr}${Get.find<MapPassengerController>().totalPassenger.toStringAsFixed(2)}'),
          Text(
            'Do you want to pay Tips for this Driver'.tr,
            textAlign: TextAlign.center,
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: [
              InkWell(
                onTap: () {
                  box.write(BoxName.tipPercentage, '0.05');

                  Toast.show(
                      context,
                      '${'Tip is '.tr}${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}',
                      AppColor.blueColor);
                  controller.update();
                },
                child: Container(
                  decoration: BoxDecoration(border: Border.all()),
                  child: const Padding(
                    padding: EdgeInsets.all(4),
                    child: Center(
                      child: Text('5%'),
                    ),
                  ),
                ),
              ),
              InkWell(
                onTap: () {
                  box.write(BoxName.tipPercentage, '0.10');
                  Toast.show(
                      context,
                      '${'Tip is'.tr} ${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}',
                      AppColor.blueColor);
                  controller.update();
                },
                child: Container(
                  decoration: BoxDecoration(border: Border.all()),
                  child: const Center(
                    child: Padding(
                      padding: EdgeInsets.all(5),
                      child: Text('10%'),
                    ),
                  ),
                ),
              ),
              InkWell(
                onTap: () {
                  box.write(BoxName.tipPercentage, '0.15');
                  Toast.show(
                      context,
                      '${'Tip is'.tr} ${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}',
                      AppColor.blueColor);
                  controller.update();
                },
                child: Container(
                  decoration: BoxDecoration(border: Border.all()),
                  child: const Center(
                    child: Padding(
                      padding: EdgeInsets.all(5),
                      child: Text('15%'),
                    ),
                  ),
                ),
              ),
              InkWell(
                onTap: () {
                  box.write(BoxName.tipPercentage, '0.20');
                  Toast.show(
                      context,
                      '${'Tip is'.tr} ${(controller.totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}',
                      AppColor.blueColor);
                  controller.update();
                },
                child: Container(
                  decoration: BoxDecoration(border: Border.all()),
                  child: const Center(
                    child: Padding(
                      padding: EdgeInsets.all(5),
                      child: Text('20%'),
                    ),
                  ),
                ),
              ),
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: [
              MyElevatedButton(
                  kolor: AppColor.redColor,
                  title: 'No i want'.tr,
                  onPressed: () {
                    box.write(BoxName.tipPercentage, '0');
                  }),
              Container(
                decoration: AppStyle.boxDecoration1,
                child: Padding(
                  padding: const EdgeInsets.all(6),
                  child: Text(
                    '${controller.totalPassenger * double.parse(box.read(BoxName.tipPercentage))}  ${box.read(BoxName.countryCode) == 'Egypt' ? 'LE'.tr : 'JOD'.tr}',
                    style: AppStyle.title,
                  ),
                ),
              ),
            ],
          )
        ],
      );
    });
  }
}
