// /utils/markerUtils.js
import L from "leaflet";
import { toast } from "react-toastify";
import circleIcon from "../components/CircleIcon";
import { store } from "../redux/store";
import { updatePolylineCoordinatesThunk } from "../redux/thunks/database/polylines/updatePolylineCoordinatesThunk";
import { redrawPolyline } from "./mapUtils";

const savePolylineRedux = (lineData) => {
  return store
    .dispatch(
      updatePolylineCoordinatesThunk({
        idModul: lineData.idModul,
        idLD: lineData.idLD,
        newCoordinates: lineData.coordinates,
      })
    )
    .unwrap()
    .catch((error) => {
      console.error("Fehler beim Speichern der Linienkoordinaten:", error.message);
    });
};

export const insertNewMarker = (closestPoints, newPoint, lineData, map) => {
  const newMarker = L.marker(newPoint, {
    icon: circleIcon,
    draggable: true,
  }).addTo(map);

  lineData.coordinates.splice(closestPoints[2], 0, [newPoint.lat, newPoint.lng]);
  savePolylineRedux(lineData); // ✅ Nutzung der Hilfsfunktion
  redrawPolyline(lineData);

  newMarker.on("dragend", () => {
    const newCoords = newMarker.getLatLng();
    const newCoordinates = [...lineData.coordinates];
    newCoordinates[closestPoints[2]] = [newCoords.lat, newCoords.lng];
    lineData.coordinates = newCoordinates;

    redrawPolyline(lineData);
    updateMarkerPosition(newMarker.getLatLng(), lineData, newMarker);
    savePolylineRedux(lineData); // ✅ Wiederverwendung
  });
};

export const removeMarker = (marker, lineData, currentZoom, currentCenter) => {
  const index = lineData.coordinates.findIndex((coord) => L.latLng(coord[0], coord[1]).equals(marker.getLatLng()));

  if (index !== -1) {
    lineData.coordinates.splice(index, 1);
    redrawPolyline(lineData);
    marker.remove();
    savePolylineRedux(lineData); // ✅ Wiederverwendung
    window.location.reload();
  }
};

export const handleEditPoi = (marker, userRights, setCurrentPoiData, setShowPoiUpdateModal, fetchPoiData, toast) => {
  if (!Array.isArray(userRights)) {
    toast.error("Benutzerrechte sind ungültig.", {
      position: "top-center",
      autoClose: 5000,
    });
    return;
  }

  if (!userRights.some((r) => r.IdRight === 56)) {
    toast.error("Benutzer hat keine Berechtigung zum Bearbeiten.", {
      position: "top-center",
      autoClose: 5000,
    });
    return;
  }

  setCurrentPoiData({
    idPoi: marker.options.id,
    name: marker.options.name,
    description: marker.options.description,
  });

  fetchPoiData(marker.options.id);
  setShowPoiUpdateModal(true);
};
