//components/DataSheet.js
import React, { useEffect, useState } from "react";
import { useRecoilState, useRecoilValue, useSetRecoilState } from "recoil";
import { gisStationsStaticDistrictState } from "../store/atoms/gisStationState";
import { gisSystemStaticState } from "../store/atoms/gisSystemState";
import { mapLayersState } from "../store/atoms/mapLayersState";
import { selectedAreaState } from "../store/atoms/selectedAreaState";
import { zoomTriggerState } from "../store/atoms/zoomTriggerState";

function DataSheet() {
  const setSelectedArea = useSetRecoilState(selectedAreaState);
  const [mapLayersVisibility, setMapLayersVisibility] =
    useRecoilState(mapLayersState);
  const [stationListing, setStationListing] = useState([]);
  const [systemListing, setSystemListing] = useState([]);
  const GisStationsStaticDistrict = useRecoilValue(
    gisStationsStaticDistrictState
  );
  const GisSystemStatic = useRecoilValue(gisSystemStaticState);
  // In deiner Dropdown onChange Funktion
  const handleAreaChange = (event) => {
    const selectedIndex = event.target.options.selectedIndex;
    const areaName = event.target.options[selectedIndex].text;
    setSelectedArea(areaName);
    //console.log("Area selected oder areaName in DataSheet.js:", areaName); // Nur zur Bestätigung in der Konsole
    //console.log("event.target:", event.target);
  };

  useEffect(() => {
    // Identify allowed system IDs
    const allowedSystems = new Set(
      GisSystemStatic.filter((system) => system.Allow === 1).map(
        (system) => system.IdSystem
      )
    );
    //console.log("allowedSystems:", allowedSystems);

    // Filter unique areas that belong to allowed systems
    const seenNames = new Set();
    const filteredAreas = GisStationsStaticDistrict.filter((item) => {
      const isUnique =
        !seenNames.has(item.Area_Name) && allowedSystems.has(item.System);
      if (isUnique) {
        seenNames.add(item.Area_Name);
        //console.log("Unique area:", item.Area_Name); //Dropdown menu
      }
      return isUnique;
    });
    //console.log("GisStationsStaticDistrict:", GisStationsStaticDistrict);

    // Set the station listings
    setStationListing(
      filteredAreas.map((area, index) => ({
        id: index + 1,
        name: area.Area_Name,
      }))
    );

    // Prepare system listings as before
    const seenSystemNames = new Set();
    const filteredSystems = GisSystemStatic.filter((item) => {
      // Entferne alle Leerzeichen und Bindestriche aus dem Namen
      const formattedName = item.Name.replace(/[\s\-]+/g, "");
      const isUnique = !seenSystemNames.has(formattedName) && item.Allow === 1;
      if (isUnique) {
        seenSystemNames.add(formattedName); // Füge den formatierten Namen hinzu
        //console.log("Unique system in DataSheet:", formattedName); // Zeige den formatierten Namen in der Konsole
      }
      return isUnique;
    });

    setSystemListing(
      filteredSystems.map((system, index) => ({
        id: index + 1,
        name: system.Name.replace(/[\s\-]+/g, ""), // Auch hier Leerzeichen und Bindestriche entfernen
      }))
    );
  }, [GisStationsStaticDistrict, GisSystemStatic]);
  //---------------------------------------------------------
  const handleCheckboxChange = (name, event) => {
    const { checked } = event.target;
    //console.log(`Checkbox ${name} checked state:`, checked); // Log the checked state of the checkbox

    setMapLayersVisibility((prev) => {
      const newState = {
        ...prev,
        [name]: checked,
      };
      //console.log(`New mapLayersVisibility state:`, newState); // Log the new state after update
      return newState;
    });
  };
  //---------------------------------------------------------
  const setZoomTrigger = useSetRecoilState(zoomTriggerState);

  const handleIconClick = () => {
    setZoomTrigger((current) => current + 1); // Trigger durch Inkrementierung
  };
  //---------------------------------------------------------

  return (
    <div
      id="mainDataSheet"
      className="absolute top-3 right-3 w-1/6 min-w-[300px] z-10 bg-white p-2 rounded-lg shadow-lg"
    >
      <div className="flex flex-col gap-4 p-4">
        <div className="flex items-center justify-between">
          <select
            onChange={handleAreaChange} // Verwenden der neuen handleAreaChange Funktion
            id="stationListing"
            className="border-solid-1 p-2 rounded ml-1"
          >
            <option>Station wählen</option>
            {stationListing.map((station) => (
              <option key={station.id} value={station.id}>
                {station.name}
              </option>
            ))}
          </select>
          <img
            src="/img/expand-icon.svg"
            alt="Expand"
            className="h-6 w-6 ml-2 cursor-pointer"
            onClick={handleIconClick}
          />
        </div>
        <div>
          {systemListing.map((system) => (
            <React.Fragment key={system.id}>
              <input
                type="checkbox"
                checked={mapLayersVisibility[system.name] || false}
                onChange={(e) => handleCheckboxChange(system.name, e)}
              />
              <label className="text-sm font-bold ml-2">{system.name}</label>
              <br />
            </React.Fragment>
          ))}
        </div>
      </div>
    </div>
  );
}

export default DataSheet;
