import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:ride/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()
          : 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.myLocation.latitude},${controller.myLocation.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,
                            'message',
                            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.myLocation,
                zoom: 15,
              ),
              markers: {
                for (var carLocation in controller.carsLocationByPassenger)
                  Marker(
                      // anchor: const Offset(4, 4),
                      position: carLocation,
                      icon: controller.carIcon,
                      markerId: MarkerId(carLocation.toString())),
                for (var carLocation
                    in controller.driverCarsLocationToPassengerAfterApplied)
                  Marker(
                      // anchor: const Offset(4, 4),
                      position: carLocation,
                      icon: controller.carIcon,
                      markerId: MarkerId(carLocation.toString())),
                if (controller.isMarkersShown)
                  Marker(
                    markerId: MarkerId('MyLocation'.tr),
                    position: controller.newStartPointLocation,
                    draggable: true,
                    icon: controller.startIcon,
                    infoWindow: const InfoWindow(
                      title: 'Time',
                      anchor: Offset(0.5, 0.5), // Adjust the anchor as needed
                      // snippet: controller.durationFromDriverToPassenger
                      //     .toString(),
                    ),
                    onDragEnd: (value) {
                      print(value);
                    },
                    // infoWindow: InfoWindow(title: 'my location'.tr),
                  ),
                if (controller.isMarkersShown)
                  Marker(
                    markerId: MarkerId('Destination'.tr),
                    position: controller.newMyLocation,
                    draggable: true,
                    icon: controller.endIcon,
                    infoWindow: InfoWindow(
                        anchor: const Offset(0.5, 0),
                        title: 'Time',
                        snippet: controller.durationByPassenger.toString()
                        // snippet: controller.durationFromDriverToPassenger
                        //     .toString(),
                        ),
                    onDragEnd: (value) {
                      print(value);
                    },
                    // infoWindow: InfoWindow(title: 'my location'.tr),
                  ),
                // Marker(
                //   markerId: MarkerId('Target'.tr),
                //   position: controller.myDestination,
                //   draggable: true,
                //   onDragEnd: (v) {
                //     print(v);
                //   },
                // ),
              },
              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.myLocation,
                  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,
            ),
    );
  }
}
