import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/table_names.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';

import '../../../constant/colors.dart';
import '../../../constant/style.dart';
import '../../../controller/functions/toast.dart';
import '../../../controller/home/map_passenger_controller.dart';
import '../../../main.dart';

GetBuilder<MapPassengerController> formSearchPlacesDestenation() {
  // DbSql sql = DbSql.instance;
  if (box.read(BoxName.addWork).toString() == '' ||
      box.read(BoxName.addHome).toString() == '') {
    box.write(BoxName.addWork, 'addWork');
    box.write(BoxName.addHome, 'addHome');
  }

  return GetBuilder<MapPassengerController>(
      builder: (controller) => Column(
            children: [
              Padding(
                padding: const EdgeInsets.all(6),
                child: Column(
                  children: [
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Container(
                          width: Get.width * .7,
                          height: 40,
                          decoration: const BoxDecoration(
                              color: AppColor.secondaryColor),
                          child: TextField(
                            decoration: InputDecoration(
                              border: const OutlineInputBorder(
                                  borderRadius: BorderRadius.only(),
                                  gapPadding: 4,
                                  borderSide: BorderSide(
                                    color: AppColor.redColor,
                                    width: 2,
                                  )),
                              suffixIcon: const Icon(Icons.search),
                              hintText: controller.hintTextDestinationPoint,
                              hintStyle: AppStyle.title,
                              hintMaxLines: 1,
                              prefixIcon: IconButton(
                                onPressed: () {
                                  controller.placeDestinationController.clear();
                                  controller.clearPlacesDestination();
                                },
                                icon: Icon(
                                  Icons.clear,
                                  color: Colors.red[300],
                                ),
                              ),
                            ),
                            controller: controller.placeDestinationController,
                            onChanged: (value) {
                              if (controller
                                      .placeDestinationController.text.length >
                                  5) {
                                controller.getPlaces();
                                controller.changeHeightPlaces();
                              }
                            },
                            // onEditingComplete: () => controller.changeHeight(),
                          ),
                        ),
                        IconButton(
                          onPressed: () {
                            controller.changeMainBottomMenuMap();
                            controller.changePickerShown();
                          },
                          icon: const Icon(
                            Icons.map_outlined,
                            color: AppColor.greenColor,
                          ),
                        ),
                        IconButton(
                          onPressed: () async {
                            List recentLocations = await sql.getCustomQuery('''
                    SELECT * FROM ${TableName.recentLocations}
                        ORDER BY id DESC
                        LIMIT 4
                      ''');
                            Get.defaultDialog(
                              title: 'Latest Recent Trip'.tr,
                              content: recentLocations.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,
                                          ),
                                        ],
                                      ),
                                    )
                                  : SizedBox(
                                      height: Get.width * .5,
                                      width: Get.width * .8,
                                      child: ListView.builder(
                                        itemCount: recentLocations.length,
                                        itemBuilder:
                                            (BuildContext context, int index) {
                                          return Row(
                                            mainAxisAlignment:
                                                MainAxisAlignment.spaceBetween,
                                            children: [
                                              TextButton(
                                                onPressed: () async {
                                                  Get.back();
                                                  controller
                                                      .convertHintTextDestinationNewPlacesFromRecent(
                                                          recentLocations,
                                                          index);
                                                },
                                                child: Text(
                                                  recentLocations[index]
                                                      ['name'],
                                                  style: AppStyle.title,
                                                ),
                                              ),
                                              IconButton(
                                                onPressed: () async {
                                                  await sql.deleteData(
                                                      TableName.placesFavorite,
                                                      recentLocations[index]
                                                          ['id']);
                                                  Get.back();
                                                  // ignore: use_build_context_synchronously
                                                  Toast.show(
                                                      context,
                                                      '${'You are Delete'.tr} ${recentLocations[index]['name']} ${'from your list'.tr}',
                                                      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),
                                              ),
                                            ],
                                          );
                                        },
                                      ),
                                    ),
                            );
                            // controller.changeMainBottomMenuMap();
                            // controller.changePickerShown();
                          },
                          icon: const Icon(
                            Icons.recent_actors,
                            color: AppColor.blueColor,
                          ),
                        ),
                      ],
                    ),
                    SizedBox(
                      height: 50,
                      child: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceAround,
                        children: [
                          InkWell(
                            onTap: () {
                              if (box.read(BoxName.addWork) == 'addWork') {
                                controller.workLocationFromMap = true;
                                controller.changeMainBottomMenuMap();
                                controller.changePickerShown();
                              } else {
                                controller.hintTextDestinationPoint = 'To Work';
                                print(box.read(BoxName.addWork));
                                final latLng = LatLng(
                                  double.parse(
                                      box.read(BoxName.addWork).split(',')[0]),
                                  double.parse(
                                      box.read(BoxName.addWork).split(',')[1]),
                                );
                                print(latLng);
                                controller.newMyLocation = latLng;
                                controller.update();
                              }
                            },
                            onLongPress: () {
                              Get.defaultDialog(
                                  title: 'Do you want to change Work location',
                                  middleText: '',
                                  confirm: MyElevatedButton(
                                      title: 'Yes'.tr,
                                      onPressed: () {
                                        Get.back();
                                        controller.workLocationFromMap = true;
                                        controller.changeMainBottomMenuMap();
                                        controller.changePickerShown();
                                      }));
                            },
                            child: Container(
                              decoration: BoxDecoration(
                                  color: AppColor.greenColor.withOpacity(.4),
                                  border: Border.all()),
                              child: Text(
                                  'Work : ${box.read(BoxName.addWork).toString() == 'addWork' ? 'Add Work' : box.read(BoxName.addWork).toString().split(',')[0] + box.read(BoxName.addWork).toString().split(',')[1]} '),
                            ),
                          ),
                          InkWell(
                            onLongPress: () {
                              Get.defaultDialog(
                                  title: 'Do you want to change Home location',
                                  middleText: '',
                                  confirm: MyElevatedButton(
                                      title: 'Yes'.tr,
                                      onPressed: () {
                                        Get.back();
                                        controller.homeLocationFromMap = true;
                                        controller.changeMainBottomMenuMap();
                                        controller.changePickerShown();
                                      }));
                            },
                            onTap: () {
                              if (box.read(BoxName.addHome) == 'addHome') {
                                controller.homeLocationFromMap = true;
                                controller.changeMainBottomMenuMap();
                                controller.changePickerShown();
                              } else {
                                controller.hintTextDestinationPoint = 'To Home';
                                print(box.read(BoxName.addHome));
                                final latLng = LatLng(
                                  double.parse(
                                      box.read(BoxName.addHome).split(',')[0]),
                                  double.parse(
                                      box.read(BoxName.addHome).split(',')[1]),
                                );
                                print(latLng);
                                controller.newMyLocation = latLng;
                                controller.update();
                              }
                            },
                            child: Container(
                              decoration: BoxDecoration(
                                  color: AppColor.yellowColor.withOpacity(.4),
                                  border: Border.all()),
                              child: Text(
                                  'Home : ${box.read(BoxName.addHome) == 'addHome' ? 'Add Home' : box.read(BoxName.addHome)} '),
                            ),
                          ),
                        ],
                      ),
                    )
                  ],
                ),
              ),
              // controller.placesDestination.isEmpty
              //     ? InkWell(
              //         onTap: () {
              //           controller.changeMainBottomMenuMap();
              //           controller.changePickerShown();
              //         },
              //         child: Text(
              //           'Choose from Map'.tr,
              //           style:
              //               AppStyle.title.copyWith(color: AppColor.blueColor),
              //         ),
              //       )
              //     : const SizedBox(),
              Container(
                height: controller.placesDestination.isNotEmpty
                    ? controller.height
                    : 0,
                color: AppColor.secondaryColor,
                child: ListView.builder(
                  itemCount: controller.placesDestination.length,
                  itemBuilder: (BuildContext context, int index) {
                    var res = controller.placesDestination[index];
                    return InkWell(
                      onTap: () async {
                        controller.changeHeightPlaces();
                        await sql.insertData({
                          'latitude': res['geometry']['location']['lat'],
                          'longitude': res['geometry']['location']['lng'],
                          'name': res['name'].toString(),
                          'rate': res['rating'].toString(),
                        }, TableName.recentLocations);

                        controller.changeHeightPlaces();

                        controller.passengerLocation = controller.newMyLocation;
                        controller.convertHintTextDestinationNewPlaces(index);

                        controller.placesDestination = [];
                        controller.placeDestinationController.clear();
                      },
                      child: Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 10),
                        child: Column(
                          children: [
                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              children: [
                                Column(
                                  children: [
                                    Image.network(
                                      res['icon'],
                                      width: 20,
                                    ),
                                    IconButton(
                                      onPressed: () async {
                                        await sql.insertData({
                                          'latitude': res['geometry']
                                              ['location']['lat'],
                                          'longitude': res['geometry']
                                              ['location']['lng'],
                                          'name': res['name'].toString(),
                                          'rate': res['rating'].toString(),
                                        }, TableName.placesFavorite);
                                        Toast.show(
                                            context,
                                            '${res['name']} ${'Saved Sucssefully'.tr}',
                                            AppColor.primaryColor);
                                      },
                                      icon: const Icon(Icons.favorite_border),
                                    ),
                                  ],
                                ),
                                Column(
                                  children: [
                                    Text(
                                      res['name'].toString(),
                                      style: AppStyle.title,
                                    ),
                                    Text(
                                      res['vicinity'].toString(),
                                      style: AppStyle.subtitle,
                                    ),
                                  ],
                                ),
                                Column(
                                  children: [
                                    Text(
                                      'rate',
                                      style: AppStyle.subtitle,
                                    ),
                                    Text(
                                      res['rating'].toString(),
                                      style: AppStyle.subtitle,
                                    ),
                                  ],
                                ),
                              ],
                            ),
                            const Divider(
                              thickness: 1,
                            )
                          ],
                        ),
                      ),
                    );
                  },
                ),
              )
            ],
          ));
}
