import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:SEFER/controller/home/points_for_rider_controller.dart';

import '../../../constant/colors.dart';
import '../../../constant/style.dart';
import '../../../controller/home/map_passenger_controller.dart';
import '../../widgets/elevated_btn.dart';
import '../../widgets/mycircular.dart';

class GoogleMapPassengerWidget extends StatelessWidget {
  GoogleMapPassengerWidget({
    super.key,
  });
  WayPointController wayPointController = Get.put(WayPointController());
  @override
  Widget build(BuildContext context) {
    return GetBuilder<MapPassengerController>(
      builder: (controller) => controller.isLoading
          ? const MyCircularProgressIndicator()
          : Positioned(
              bottom: Get.height * .2,
              top: 0,
              left: 0,
              right: 0,
              child: GoogleMap(
                onMapCreated: controller.onMapCreated,
                cameraTargetBounds: CameraTargetBounds(controller.boundsdata),
                minMaxZoomPreference: const MinMaxZoomPreference(6, 18),
                onLongPress: (argument) {
                  Get.defaultDialog(
                    title: 'Are you want to go to this site'.tr,
                    content: Column(
                      children: [
                        Text('${argument.latitude},${argument.longitude}'),
                      ],
                    ),
                    confirm: MyElevatedButton(
                        title: 'Ok'.tr,
                        onPressed: () async {
                          controller.clearPolyline();
                          if (controller.dataCarsLocationByPassenger != null) {
                            await controller.getMap(
                                '${controller.passengerLocation.latitude},${controller.passengerLocation.longitude}',
                                '${argument.latitude.toString()},${argument.longitude.toString()}');

                            Get.back();
                            controller.bottomSheet();
                            controller.showBottomSheet1();
                          } else {
                            Get.back();
                            Get.snackbar(
                              'We Are Sorry That we dont have cars in your Location!'
                                  .tr,
                              '',
                              colorText: AppColor.redColor,
                              duration: const Duration(seconds: 11),
                              instantInit: true,
                              snackPosition: SnackPosition.TOP,
                              titleText: Text(
                                'Error'.tr,
                                style:
                                    const TextStyle(color: AppColor.redColor),
                              ),
                              messageText: Text(
                                'We Are Sorry That we dont have cars in your Location!'
                                    .tr,
                                style: AppStyle.title,
                              ),
                              icon: const Icon(Icons.error),
                              shouldIconPulse: true,
                              maxWidth: double.infinity,
                              margin: const EdgeInsets.all(16),
                              padding: const EdgeInsets.all(16),
                              borderRadius: 8,
                              borderColor: AppColor.redColor,
                              borderWidth: 2,
                              backgroundColor: AppColor.secondaryColor,
                              leftBarIndicatorColor: AppColor.redColor,
                              boxShadows: [
                                BoxShadow(
                                  color: Colors.black.withOpacity(0.25),
                                  blurRadius: 4,
                                  spreadRadius: 2,
                                  offset: const Offset(0, 4),
                                ),
                              ],
                              backgroundGradient: const LinearGradient(
                                colors: [
                                  AppColor.redColor,
                                  AppColor.accentColor
                                ],
                                begin: Alignment.topLeft,
                                end: Alignment.bottomRight,
                              ),
                              // mainButton: TextButton(
                              //   onPressed: () {
                              //     controller.getCarsLocationByPassenger();
                              //   },
                              //   child: Text(
                              //     'Try Again'.tr,
                              //     style: const TextStyle(
                              //         color: AppColor.secondaryColor),
                              //   ),
                              // ),
                              onTap: (GetSnackBar snackBar) {
                                // Do something when the snackbar is tapped.
                              },
                              isDismissible: true,
                              showProgressIndicator: false,
                              dismissDirection: DismissDirection.up,
                              progressIndicatorController: null,
                              progressIndicatorBackgroundColor:
                                  Colors.transparent,
                              progressIndicatorValueColor: null,
                              snackStyle: SnackStyle.GROUNDED,
                              forwardAnimationCurve: Curves.easeInToLinear,
                              reverseAnimationCurve: Curves.easeInOut,
                              animationDuration:
                                  const Duration(milliseconds: 4000),
                              barBlur: 8,
                              overlayBlur: 0,
                              snackbarStatus: null,
                              overlayColor:
                                  AppColor.primaryColor.withOpacity(0.5),
                              userInputForm: null,
                            );
                          }

                          //
                        }),
                  );
                },

                onTap: (argument) {
                  controller.hidePlaces();

                  // controller.changeBottomSheetShown();
                  // controller.bottomSheet();
                },
                initialCameraPosition: CameraPosition(
                  target: controller.passengerLocation,
                  zoom: 15,
                ),
                markers: controller.markers.toSet(),
                //  {
                //   if (controller.statusRide != 'Apply' ||
                //       !controller.rideTimerBegin)
                //     for (var carLocation in controller.carLocationsModels)

                //       // Marker(
                //       //   // anchor: const Offset(4, 4),
                //       //   position: LatLng(
                //       //     carLocation.latitude,
                //       //     carLocation.longitude,
                //       //   ),
                //       //   icon: controller.carIcon,
                //       //   markerId: MarkerId(carLocation.toString()),
                //       //   rotation: carLocation.heading,
                //       // ),
                //   // controller.carMarrkerAplied,
                //   if (controller.statusRide == 'Apply')
                //     // for (var carLocation
                //     //     in controller.driverCarsLocationToPassengerAfterApplied)
                //     Marker(
                //         // anchor: const Offset(4, 4),
                //         position: LatLng(
                //           double.parse(
                //             controller
                //                     .datadriverCarsLocationToPassengerAfterApplied[
                //                 'message'][0]['latitude'],
                //           ),
                //           double.parse(
                //             controller
                //                     .datadriverCarsLocationToPassengerAfterApplied[
                //                 'message'][0]['longitude'],
                //           ),
                //         ), //carLocation,
                //         icon: controller.carIcon,
                //         rotation: double.parse(controller
                //                 .datadriverCarsLocationToPassengerAfterApplied[
                //             'message'][0]['heading']),
                //         markerId: MarkerId(controller
                //             .datadriverCarsLocationToPassengerAfterApplied[
                //                 'message'][0]['longitude']
                //             .toString())),
                //   for (int i = 1;
                //       i < controller.coordinatesWithoutEmpty.length - 1;
                //       i++)
                //     Marker(
                //         // anchor: const Offset(4, 4),
                //         position: LatLng(
                //             double.parse(controller.coordinatesWithoutEmpty[i]
                //                 .split(',')[0]),
                //             double.parse(controller.coordinatesWithoutEmpty[i]
                //                 .split(',')[1])),
                //         icon: controller.tripIcon,
                //         markerId: MarkerId(
                //             controller.coordinatesWithoutEmpty[i].toString())),
                //   if (controller.isMarkersShown)
                //     Marker(
                //       markerId: MarkerId('MyLocation'.tr),
                //       position: controller.newStartPointLocation,
                //       draggable: true,
                //       icon: controller.startIcon,
                //     ),
                //   if (controller.isMarkersShown)
                //     Marker(
                //       markerId: MarkerId('Destination'.tr),
                //       position: controller.myDestination,
                //       draggable: true,
                //       icon: controller.endIcon,
                //     ),
                //   if (controller.haveSteps)
                //     Marker(
                //       markerId: MarkerId('StartSteps'.tr),
                //       position: LatLng(
                //           double.parse(
                //               controller.placesCoordinate[0].split(',')[0]),
                //           double.parse(
                //               controller.placesCoordinate[0].split(',')[1])),
                //       draggable: true,
                //       icon: controller.startIcon,
                //     ),
                //   if (controller.haveSteps)
                //     Marker(
                //       markerId: MarkerId('EndSteps'.tr),
                //       position: controller.latestPosition,
                //       draggable: true,
                //       icon: controller.endIcon,
                //     ),
                // },

                polylines: {
                  Polyline(
                    zIndex: 2,
                    consumeTapEvents: true,
                    geodesic: true,
                    endCap: Cap.buttCap,
                    startCap: Cap.buttCap,
                    visible: true,
                    polylineId: const PolylineId('route'),
                    points: controller.polylineCoordinates,
                    color: AppColor.primaryColor,
                    width: 5,
                  ),

                  Polyline(
                    zIndex: 1,
                    consumeTapEvents: true,
                    geodesic: true,
                    endCap: Cap.buttCap,
                    startCap: Cap.buttCap,
                    visible: true,
                    polylineId: const PolylineId('route0'),
                    points: controller.polylineCoordinatesPointsAll[0],
                    color: AppColor.blueColor,
                    width: 5,
                  ),
                  Polyline(
                    zIndex: 2,
                    consumeTapEvents: true,
                    geodesic: true,
                    endCap: Cap.buttCap,
                    startCap: Cap.buttCap,
                    visible: true,
                    polylineId: const PolylineId('route1'),
                    points: controller.polylineCoordinatesPointsAll[1],
                    color: AppColor.yellowColor,
                    width: 5,
                  ),
                  Polyline(
                    zIndex: 2,
                    consumeTapEvents: true,
                    geodesic: true,
                    endCap: Cap.buttCap,
                    startCap: Cap.buttCap,
                    visible: true,
                    polylineId: const PolylineId('route2'),
                    points: controller.polylineCoordinatesPointsAll[2],
                    color: AppColor.greenColor,
                    width: 5,
                  ),
                  Polyline(
                    zIndex: 2,
                    consumeTapEvents: true,
                    geodesic: true,
                    endCap: Cap.buttCap,
                    startCap: Cap.buttCap,
                    visible: true,
                    polylineId: const PolylineId('route3'),
                    points: controller.polylineCoordinatesPointsAll[2],
                    color: AppColor.deepPurpleAccent,
                    width: 5,
                  ),
                  // Polyline(
                  //   zIndex: 2,
                  //   consumeTapEvents: true,
                  //   geodesic: true,
                  //   endCap: Cap.buttCap,
                  //   startCap: Cap.buttCap,
                  //   visible: true,
                  //   polylineId: PolylineId('g'),
                  //   points: [
                  //     LatLng(controller.southwest.latitude,
                  //         controller.southwest.longitude),
                  //     LatLng(controller.northeast.latitude,
                  //         controller.northeast.longitude)
                  //   ],
                  //   color: AppColor.primaryColor,
                  //   width: 5,
                  // ),
                },
                // circles: {
                //   Circle(
                //       circleId: const CircleId('kk'),
                //       center: controller.mylocation,
                //       radius: 60,
                //       fillColor: AppColor.primaryColor,)
                // },

                circles: <Circle>{
                  Circle(
                    circleId: const CircleId('circle_id'),
                    center: controller.passengerLocation,
                    radius: 100,
                    fillColor: Colors.blue.withOpacity(0.3),
                    strokeColor: Colors.blue,
                    strokeWidth: 2,
                  ),
                },

                mapType:
                    controller.mapType ? MapType.satellite : MapType.normal,
                myLocationButtonEnabled: true,
                // liteModeEnabled: true, tiltGesturesEnabled: false,

                // indoorViewEnabled: true,
                trafficEnabled: controller.mapTrafficON,
                buildingsEnabled: true,
                mapToolbarEnabled: true,
                onCameraMove: (position) {
                  int waypointsLength =
                      Get.find<WayPointController>().wayPoints.length;
                  int index = controller.wayPointIndex;
                  if (waypointsLength > 0) {
                    controller.placesCoordinate[index] =
                        '${position.target.latitude.toString()},${position.target.longitude}';
                  }
                  if (controller.startLocationFromMap == true) {
                    controller.newStartPointLocation = position.target;
                  }
                  controller.newMyLocation = position.target;

                  // print('my' + controller.mylocation.toString());
                  // print('new' + controller.newMylocation.toString());
                },
                myLocationEnabled: true,
                // liteModeEnabled: true,
              ),
            ),
    );
  }
}
