import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/map_passenger_controller.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/home/map_widget.dart/form_search_places_destenation.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';

import '../../../constant/colors.dart';
import '../../../constant/table_names.dart';
import '../../../controller/functions/toast.dart';
import '../../../controller/functions/tts.dart';
import 'form_search_start.dart';

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

  @override
  Widget build(BuildContext context) {
    Get.put(MapPassengerController());
    return GetBuilder<MapPassengerController>(
        builder: (controller) => Positioned(
              bottom: 3,
              left: 5,
              right: 5,
              child: GestureDetector(
                onVerticalDragUpdate: (DragUpdateDetails details) {
                  // Update the size of the GestureDetector based on the user's finger position.

                  // _height = details.globalPosition.dy;
                  controller.changeMainBottomMenuMap();
                },
                child: AnimatedContainer(
                  duration: const Duration(milliseconds: 500),
                  height: controller.mainBottomMenuMapHeight,
                  decoration: AppStyle.boxDecoration,
                  child: SingleChildScrollView(
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.start,
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: [
                        controller.isMainBottomMenuMap
                            ? Padding(
                                padding: const EdgeInsets.all(15),
                                child: InkWell(
                                  onTap: () =>
                                      controller.changeMainBottomMenuMap(),
                                  child: Container(
                                      width: Get.width * .8,
                                      height: Get.height * .1,
                                      decoration: AppStyle.boxDecoration1,
                                      child: DefaultTextStyle(
                                        style: AppStyle.title,
                                        child: Center(
                                          child: controller.isPickerShown
                                              ? clickPointPosition(
                                                  controller, context)
                                              : whereWidgetsmall(controller),
                                        ),
                                      )),
                                ),
                              )
                            : IconButton(
                                onPressed: () {
                                  controller.changeMainBottomMenuMap();
                                },
                                icon: controller.isMainBottomMenuMap
                                    ? const Icon(
                                        Icons.ads_click,
                                        size: 35,
                                      )
                                    : const Icon(
                                        Icons.arrow_circle_down_rounded,
                                        size: 35,
                                      ),
                              ),
                        controller.isMainBottomMenuMap
                            ? recentPlacesWidget(controller)
                            : const SizedBox(),
                        controller.isMainBottomMenuMap
                            ? const SizedBox()
                            : InkWell(
                                onTap: () async {
                                  controller.getCurrentLocationFormString();
                                },
                                child: Text(
                                  'From :'.tr +
                                      ' ${controller.currentLocationString}'.tr,
                                  style: AppStyle.subtitle,
                                ),
                              ),
                        controller.isMainBottomMenuMap
                            ? const SizedBox()
                            : Column(
                                children: [
                                  controller.currentLocationToFormPlaces
                                      ? const SizedBox()
                                      : formSearchPlacesStart(),
                                  formSearchPlacesDestenation(),
                                  const SizedBox(
                                    height: 10,
                                  ),
                                  MyElevatedButton(
                                      title: 'Get Details of Trip'.tr,
                                      onPressed: () async {
                                        controller.changeMainBottomMenuMap();

                                        await controller.getMap(
                                          '${controller.newStartPointLocation.latitude},${controller.newStartPointLocation.longitude}',
                                          '${controller.newMyLocation.latitude},${controller.newMyLocation.longitude}',
                                        );
                                        controller.currentLocationToFormPlaces =
                                            false;
                                        controller.placesDestination = [];
                                        // controller.isCancelRidePageShown = true;
                                        controller.clearPlacesStart();
                                        controller.clearPlacesDestination();

                                        controller.showBottomSheet1();
                                        Get.back();
                                        controller.showBottomSheet1();
                                      }),
                                  TextButton(
                                    onPressed: () {
                                      controller.changeMainBottomMenuMap();
                                      controller.changeWayPointSheet();
                                    },
                                    child: Text(
                                      "If you want add stop click here".tr,
                                      style: AppStyle.title,
                                    ),
                                  ),
                                ],
                              )
                      ],
                    ),
                  ),
                ),
              ),
            ));
  }

  SizedBox recentPlacesWidget(MapPassengerController controller) {
    final textToSpeechController = Get.put(TextToSpeechController());
    return SizedBox(
      height: 50,
      child: ListView.builder(
        itemCount: controller.recentPlaces.length,
        scrollDirection: Axis.horizontal,
        itemBuilder: (BuildContext context, int index) {
          return TextButton(
            onPressed: () {
              Get.defaultDialog(
                  title: 'Are you want to go this site'.tr,
                  titleStyle: AppStyle.title,
                  middleText: '',
                  content: IconButton(
                    onPressed: () {
                      textToSpeechController
                          .speakText('Are you want to go this site'.tr);
                    },
                    icon: const Icon(
                      Icons.headphones,
                      size: 45,
                    ),
                  ),
                  confirm: MyElevatedButton(
                    title: 'Yes'.tr,
                    onPressed: () async {
                      await controller.getLocation();
                      await controller.getMap(
                        '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
                        '${controller.recentPlaces[index]['latitude']},${controller.recentPlaces[index]['longitude']}',
                      );
                      // controller.changePickerShown();
                      controller.showBottomSheet1();

                      // controller.showBottomSheet1();
                      Get.back();
                    },
                  ));
            },
            child: Container(
              decoration: AppStyle.boxDecoration1,
              child: Padding(
                padding: const EdgeInsets.all(2),
                child: Text(
                  controller.recentPlaces[index]['name'],
                  style: AppStyle.title,
                ),
              ),
            ),
          );
        },
      ),
    );
  }

  TextButton clickPointPosition(
      MapPassengerController controller, BuildContext context) {
    return TextButton(
      onPressed: () async {
        controller.clearPolyline();
        controller.data = [];
        if (controller.startLocationFromMap == true) {
          controller.newMyLocation = controller.newStartPointLocation;
          controller.hintTextStartPoint =
              '${controller.newStartPointLocation.latitude.toStringAsFixed(4)} , ${controller.newStartPointLocation.longitude.toStringAsFixed(4)}';
          controller.startLocationFromMap = false;
          controller.isPickerShown = false;
        } else if (controller.workLocationFromMap == true) {
          controller.hintTextDestinationPoint = 'To Work'.tr;
          box.write(BoxName.addWork,
              '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}');
          controller.newMyLocation = controller.newMyLocation;
          controller.isPickerShown = false;
          controller.workLocationFromMap = false;
          Get.snackbar('Work Saved'.tr, '',
              backgroundColor: AppColor.greenColor);
        } else if (controller.homeLocationFromMap == true) {
          controller.hintTextDestinationPoint = 'To Home'.tr;
          box.write(BoxName.addHome,
              '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}');
          controller.newMyLocation = controller.newMyLocation;
          controller.isPickerShown = false;
          controller.homeLocationFromMap = false;
          controller.update();
          Get.snackbar('Home Saved'.tr, '',
              backgroundColor: AppColor.greenColor);
        } else {
          controller.hintTextDestinationPoint =
              '${controller.newMyLocation.latitude.toStringAsFixed(4)} , ${controller.newMyLocation.longitude.toStringAsFixed(4)}';
          controller.newMyLocation = controller.newMyLocation;
          controller.isPickerShown = false;
        }

        controller.placesDestination = [];
        controller.placeDestinationController.clear();

        controller.showBottomSheet1();
        Get.back();
        controller.showBottomSheet1();
        controller.changeMainBottomMenuMap();
      },
      child: Row(
        children: [
          IconButton(
            onPressed: () {
              controller.changeMainBottomMenuMap();
            },
            icon: controller.isMainBottomMenuMap
                ? const Icon(
                    Icons.arrow_circle_up_rounded,
                    size: 35,
                  )
                : const Icon(
                    Icons.arrow_circle_down_rounded,
                    size: 35,
                  ),
          ),
          Text(
            "Click here point".tr,
            style: AppStyle.title,
          ),
        ],
      ),
    );
  }

  Row whereWidgetsmall(MapPassengerController controller) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: [
        IconButton(
          onPressed: () {
            controller.changeMainBottomMenuMap();
          },
          icon: controller.isMainBottomMenuMap
              ? const Icon(
                  Icons.ads_click,
                  size: 35,
                )
              : const Icon(
                  Icons.arrow_circle_down_rounded,
                  size: 35,
                ),
        ),
        Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            SizedBox(
                height: 30,
                child: Text('${'Where to'.tr} ${box.read(BoxName.name)}')),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                controller.noCarString == false
                    ? Text('Nearest Car for you about '.tr)
                    : Container(
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(12),
                          color: AppColor.redColor,
                        ),
                        child: Padding(
                          padding: const EdgeInsets.all(6),
                          child: Text(
                            'No Car in your site. Sorry!'.tr,
                            style: AppStyle.title
                                .copyWith(color: AppColor.secondaryColor),
                          ),
                        ),
                      ),
                controller.noCarString == false
                    ? Container(
                        decoration: BoxDecoration(
                            border:
                                Border.all(color: AppColor.redColor, width: 3)),
                        child: Padding(
                          padding: const EdgeInsets.all(4),
                          child: Text((controller.nearestCar != null
                              ? controller.nearestDistance.toStringAsFixed(0)
                              : 'N/A')),
                        ),
                      )
                    : const SizedBox(),
              ],
            )
          ],
        ),
      ],
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    Get.put(MapPassengerController());
    return GetBuilder<MapPassengerController>(
        builder: (controller) => DefaultTextStyle(
              style: AppStyle.title,
              child: Center(
                  child: InkWell(
                onTap: () async {
                  List favoritePlaces =
                      await sql.getAllData(TableName.placesFavorite);
                  // print(favoritePlaces);
                  Get.defaultDialog(
                    title: 'Favorite Places'.tr,
                    content: SizedBox(
                      width: Get.width * .8,
                      height: 300,
                      child: favoritePlaces.isEmpty
                          ? Center(
                              child: Column(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: [
                                  const Icon(
                                    Icons.hourglass_empty_rounded,
                                    size: 99,
                                    color: AppColor.primaryColor,
                                  ),
                                  Text(
                                    'You Dont Have Any places yet !'.tr,
                                    style: AppStyle.title,
                                  ),
                                ],
                              ),
                            )
                          : ListView.builder(
                              itemCount: favoritePlaces.length,
                              itemBuilder: (BuildContext context, int index) {
                                return Row(
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceBetween,
                                  children: [
                                    TextButton(
                                      onPressed: () async {
                                        Get.back();
                                        await controller.getLocation();
                                        await controller.getMap(
                                          '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
                                          '${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}',
                                        );
                                        // controller.changePickerShown();
                                        controller.showBottomSheet1();

                                        controller.showBottomSheet1();
                                      },
                                      child: Text(
                                        favoritePlaces[index]['name'],
                                        style: AppStyle.title,
                                      ),
                                    ),
                                    IconButton(
                                      onPressed: () async {
                                        await sql.deleteData(
                                            TableName.placesFavorite,
                                            favoritePlaces[index]['id']);
                                        Get.back();
                                        // ignore: use_build_context_synchronously
                                        Toast.show(
                                            context,
                                            '${'You are Delete'.tr} ${favoritePlaces[index]['name']} from your list',
                                            AppColor.redColor);
                                        // Get.snackbar('Deleted'.tr,
                                        //     '${'You are Delete'.tr} ${favoritePlaces[index]['name']} from your list',
                                        //     backgroundColor:
                                        //         AppColor.accentColor);
                                      },
                                      icon: const Icon(Icons.favorite_outlined),
                                    ),
                                  ],
                                );
                              },
                            ),
                    ),
                    cancel: MyElevatedButton(
                        title: 'Back'.tr, onPressed: () => Get.back()),
                  );
                },
                child: Text(
                  '\u{1F3D8} ' 'Favorite Places'.tr,
                  style: AppStyle.title,
                ),
              )),
            ));
  }
}
