import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_font_icons/flutter_font_icons.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/info.dart';
import 'package:SEFER/controller/firebase/firbase_messge.dart';
import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';

import '../../../../constant/style.dart';
import '../../../../controller/functions/launch.dart';
import '../home_captain/widget/call_page.dart';

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

  @override
  Widget build(BuildContext context) {
    Get.put(MapDriverController());
    return GetBuilder<MapDriverController>(
      builder: (controller) => controller.isPassengerInfoWindow == true
          ? Stack(
              children: [
                Positioned(
                  bottom: 5,
                  // left: 8,
                  child: AnimatedContainer(
                    duration: const Duration(milliseconds: 300),
                    height: controller.passengerInfoWindowHeight,
                    width: Get.width,
                    decoration: AppStyle.boxDecoration1,
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.spaceAround,
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          DefaultTextStyle(
                              style: AppStyle.title,
                              child: Row(
                                mainAxisAlignment:
                                    MainAxisAlignment.spaceBetween,
                                children: [
                                  Text(
                                    'Go to passenger Location now'.tr,
                                    style: AppStyle.title
                                        .copyWith(color: AppColor.greenColor),
                                  ),
                                  controller.isRideBegin
                                      ? const SizedBox()
                                      : Row(
                                          mainAxisAlignment:
                                              MainAxisAlignment.spaceAround,
                                          children: [
                                            GestureDetector(
                                                onTap: () async {
                                                  controller.isSocialPressed =
                                                      true;
                                                  await controller
                                                      .driverCallPassenger(); // to check from scam
                                                  Get.to(
                                                      () => const CallPage());
                                                  // launchCommunication('phone',
                                                  //     controller.phone.toString(), '');
                                                },
                                                child: const Icon(
                                                  Icons.phone,
                                                  color: AppColor.blueColor,
                                                )),
                                            const SizedBox(
                                              width: 25,
                                            ),
                                            GestureDetector(
                                                onTap: () {
                                                  controller.isSocialPressed =
                                                      true;
                                                  launchCommunication(
                                                      'email',
                                                      controller.passengerPhone
                                                          .toString(),
                                                      '${'Hello this is Driver'.tr} ${box.read(BoxName.nameDriver)}');
                                                },
                                                child: const Icon(
                                                  Icons.email,
                                                  color: AppColor.redColor,
                                                )),
                                            const SizedBox(
                                              width: 25,
                                            ),
                                            Container(
                                                decoration:
                                                    AppStyle.boxDecoration,
                                                child: IconButton(
                                                  onPressed: () async {
                                                    await controller
                                                        .openGoogleMapFromDriverToPassenger();
                                                  },
                                                  icon: const Icon(
                                                    MaterialCommunityIcons
                                                        .map_marker_radius,
                                                    size: 35,
                                                    color: AppColor.blueColor,
                                                  ),
                                                )),
                                          ],
                                        ),
                                ],
                              )),
                          Row(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: [
                              Container(
                                decoration: AppStyle.boxDecoration1,
                                width: Get.width * .22,
                                child: Padding(
                                  padding: const EdgeInsets.all(4.0),
                                  child: Text(
                                    controller.hours > 1
                                        ? '⌚️ ${controller.hours}h ${controller.minutes}m' // Ride Duration with emoji
                                        : '⌚️ ${controller.minutes}m', // Short ride duration
                                    style: AppStyle.title,
                                  ),
                                ),
                              ),
                              const SizedBox(
                                  width: 16.0), // Add spacing between sections
                              Container(
                                decoration: AppStyle.boxDecoration1,
                                width: Get.width * .22,
                                child: Padding(
                                  padding: const EdgeInsets.all(4),
                                  child: Text(
                                    ' ${controller.distance} km', // Distance with emoji
                                    style: AppStyle.title,
                                  ),
                                ),
                              ),
                              const SizedBox(
                                  width: 16.0), // Add spacing between sections
                              Container(
                                decoration: AppStyle.boxDecoration1,
                                width: Get.width * .35,
                                child: Padding(
                                  padding: const EdgeInsets.all(4.0),
                                  child: Text(
                                    controller
                                        .passengerName, // Passenger name with emoji
                                    style: AppStyle.title,
                                  ),
                                ),
                              ),
                            ],
                          ),
                          Row(
                            mainAxisAlignment: MainAxisAlignment.spaceAround,
                            children: [
                              Container(
                                decoration: AppStyle.boxDecoration1,
                                width: Get.width * .4,
                                child: Padding(
                                  padding: const EdgeInsets.all(4),
                                  child: Row(
                                    children: [
                                      Text('Total Cost is '.tr,
                                          style: AppStyle.title),
                                      Text(
                                        controller.totalPassenger.toString(),
                                        style: AppStyle.title,
                                      ),
                                    ],
                                  ),
                                ),
                              ),
                              Container(
                                decoration: AppStyle.boxDecoration1,
                                width: Get.width * .4,
                                child: Padding(
                                  padding: const EdgeInsets.all(4),
                                  child: Text(controller.carType,
                                      style: AppStyle.title),
                                ),
                              ),
                            ],
                          ),
                          controller.remainingTimeToPassenger != 0
                              ? Stack(
                                  children: [
                                    LinearProgressIndicator(
                                      backgroundColor: AppColor.accentColor,
                                      color:
                                          controller.remainingTimeToPassenger <
                                                  60
                                              ? AppColor.redColor
                                              : AppColor.greenColor,
                                      minHeight: 35,
                                      borderRadius: BorderRadius.circular(15),
                                      value: controller.progressToPassenger
                                          .toDouble(),
                                    ),
                                    Center(
                                      child: Text(
                                        controller
                                            .stringRemainingTimeToPassenger,
                                        style: AppStyle.title,
                                      ),
                                    )
                                  ],
                                )
                              : controller.isRideBegin
                                  ? const SizedBox()
                                  : Column(
                                      children: [
                                        Row(
                                          mainAxisAlignment:
                                              MainAxisAlignment.spaceAround,
                                          children: [
                                            MyElevatedButton(
                                                title: 'Start the Ride'.tr,
                                                kolor: AppColor.greenColor,
                                                onPressed: () {
                                                  Get.defaultDialog(
                                                      title:
                                                          'Is the Passenger in your Car ?'
                                                              .tr,
                                                      titleStyle:
                                                          AppStyle.title,
                                                      middleText:
                                                          'don\'t start trip if not '
                                                              .tr,
                                                      middleTextStyle:
                                                          AppStyle.title,
                                                      confirm: MyElevatedButton(
                                                          title: 'OK'.tr,
                                                          kolor: AppColor
                                                              .greenColor,
                                                          onPressed: () async {
                                                            await controller
                                                                .startRideFromDriver();
                                                            Get.back();
                                                          }),
                                                      cancel: MyElevatedButton(
                                                          title:
                                                              'No ,still Waiting.'
                                                                  .tr,
                                                          kolor:
                                                              AppColor.redColor,
                                                          onPressed: () {
                                                            Get.back();
                                                          }));
                                                }),
                                            controller.isArrivedSend
                                                ? MyElevatedButton(
                                                    title: 'I arrive you'.tr,
                                                    kolor: AppColor.yellowColor,
                                                    onPressed: () async {
                                                      if (controller
                                                              .calculateDistanceBetweenDriverAndPassengerLocation() <
                                                          40) {
                                                        FirebaseMessagesController()
                                                            .sendNotificationToPassengerToken(
                                                                'Hi ,I Arrive your site',
                                                                'I Arrive your site'
                                                                    .tr,
                                                                controller
                                                                    .tokenPassenger,
                                                                []);
                                                        controller
                                                            .startTimerToShowDriverWaitPassengerDuration();
                                                        controller
                                                                .isArrivedSend =
                                                            false;
                                                      } else {
                                                        Get.defaultDialog(
                                                            title:
                                                                'You are not in near to passenger location'
                                                                    .tr,
                                                            middleText:
                                                                'please go to picker location exactly'
                                                                    .tr,
                                                            confirm:
                                                                MyElevatedButton(
                                                                    title:
                                                                        'Ok'.tr,
                                                                    onPressed:
                                                                        () {
                                                                      Get.back();
                                                                    }));
                                                      }
                                                    })
                                                : const SizedBox()
                                          ],
                                        ),
                                        controller.remainingTimeInPassengerLocatioWait <
                                                    300 &&
                                                controller
                                                        .remainingTimeInPassengerLocatioWait !=
                                                    0
                                            ? Stack(
                                                children: [
                                                  LinearProgressIndicator(
                                                    backgroundColor:
                                                        AppColor.accentColor,
                                                    color: controller
                                                                .remainingTimeInPassengerLocatioWait <
                                                            60
                                                        ? AppColor.redColor
                                                        : AppColor.greenColor,
                                                    minHeight: 50,
                                                    borderRadius:
                                                        BorderRadius.circular(
                                                            15),
                                                    value: controller
                                                        .progressInPassengerLocationFromDriver
                                                        .toDouble(),
                                                  ),
                                                  Center(
                                                    child: Text(
                                                      controller
                                                          .stringRemainingTimeWaitingPassenger,
                                                      style: AppStyle.title,
                                                    ),
                                                  )
                                                ],
                                              )
                                            : controller.isdriverWaitTimeEnd
                                                ? MyElevatedButton(
                                                    title: 'You Can Cancel Trip And get Cost of Trip From'
                                                            .tr +
                                                        ' ${AppInformation.appName}'
                                                            .tr,
                                                    kolor: AppColor
                                                        .deepPurpleAccent,
                                                    onPressed: () {
                                                      Get.defaultDialog(
                                                          title:
                                                              'Are you sure to cancel?'
                                                                  .tr,
                                                          titleStyle:
                                                              AppStyle.title,
                                                          middleText: '',
                                                          confirm:
                                                              MyElevatedButton(
                                                                  title:
                                                                      'Yes'.tr,
                                                                  onPressed:
                                                                      () async {
                                                                    FirebaseMessagesController().sendNotificationToPassengerToken(
                                                                        'Driver Cancel Your Trip',
                                                                        'You will be pay the cost to driver or we will get it from you on next trip'
                                                                            .tr,
                                                                        controller
                                                                            .tokenPassenger,
                                                                        []);
                                                                    await controller
                                                                        .addWaitingTimeCostFromPassengerToDriverWallet();
                                                                    controller
                                                                            .isdriverWaitTimeEnd =
                                                                        false;
                                                                  }));
                                                    })
                                                : const SizedBox(),
                                      ],
                                    ),
                        ],
                      ),
                    ),
                  ),
                ),
              ],
            )
          // : controller.remainingTimeToShowPassengerInfoWindowFromDriver > 0 //
          //     ? Positioned(
          //         bottom: Get.height * .2,
          //         left: 15,
          //         child: Container(
          //           decoration: AppStyle.boxDecoration,
          //           child: Padding(
          //             padding: const EdgeInsets.all(8.0),
          //             child: Row(
          //               children: [
          //                 Stack(
          //                   alignment: Alignment.center,
          //                   children: [
          //                     const CircularProgressIndicator(
          //                       backgroundColor: AppColor.redColor,
          //                       strokeWidth: 10,
          //                       color: AppColor.redColor,
          //                       value: 1,
          //                     ),
          //                     CircularProgressIndicator(
          //                       value: controller.progress,
          //                       // Set the color based on the "isNearEnd" condition
          //                       color: AppColor.yellowColor,
          //                     ),
          //                     Text(
          //                       '${controller.remainingTimeToShowPassengerInfoWindowFromDriver}',
          //                       style: AppStyle.number,
          //                     ),
          //                   ],
          //                 ),
          //                 const SizedBox(
          //                   width: 10,
          //                 ),
          //                 Text(
          //                   'Please Wait If passenger want To Cancel!'.tr,
          //                   style: AppStyle.title,
          //                 ),
          //               ],
          //             ),
          //           ),
          //         ),
          //       )
          : const SizedBox(),
    );
  }
}
