// hooks/useMapComponentState.js
// POI -> Kontextmenü -> POI bearbeiten -> Dropdown Geräteauswahl
import { useState, useEffect } from "react";
import { useSelector } from "react-redux";

export const useMapComponentState = () => {
  const [poiTypData, setPoiTypData] = useState([]);
  const [isPoiTypLoaded, setIsPoiTypLoaded] = useState(false);
  const [deviceName, setDeviceName] = useState("");
  const [locationDeviceData, setLocationDeviceData] = useState([]);
  const [priorityConfig, setPriorityConfig] = useState([]);
  const [menuItemAdded, setMenuItemAdded] = useState(false);

  // ✅ Redux: Zustand der Sichtbarkeit des POI-Layers
  const poiLayerVisible = useSelector((state) => state.poiLayerVisible.visible);

  useEffect(() => {
    const fetchPoiTypData = async () => {
      if (process.env.NEXT_PUBLIC_USE_MOCK_API === "true") {
        console.log("⚠️ Mock-API: POI Typen geladen (Mock)");

        const mockData = [
          { idPoiTyp: 1, name: "Mock Zähleranschlusskasten", icon: 4, onlySystemTyp: 0 },
          { idPoiTyp: 2, name: "Mock Geräteschrank", icon: 2, onlySystemTyp: 0 },
          { idPoiTyp: 4, name: "Mock Parkplatz", icon: 3, onlySystemTyp: 0 },
          { idPoiTyp: 6, name: "Mock Zufahrt", icon: 4, onlySystemTyp: 0 },
          { idPoiTyp: 20, name: "Mock Zählgerät", icon: 5, onlySystemTyp: 110 },
          { idPoiTyp: 21, name: "Mock Messschleife", icon: 6, onlySystemTyp: 110 },
          { idPoiTyp: 25, name: "Mock Sonstige", icon: 0, onlySystemTyp: 0 },
          { idPoiTyp: 33, name: "Mock Autobahnauffahrt", icon: 4, onlySystemTyp: null },
        ];

        setPoiTypData(mockData);
        setIsPoiTypLoaded(true);
        return;
      }

      try {
        const response = await fetch("/api/talas_v5_DB/poiTyp/readPoiTyp");
        const data = await response.json();
        setPoiTypData(data);
        setIsPoiTypLoaded(true);
      } catch (error) {
        console.error("❌ Fehler beim Abrufen der POI-Typen:", error);
        setPoiTypData([]);
        setIsPoiTypLoaded(true);
      }
    };

    const fetchDeviceData = async () => {
      try {
        const protocol = window.location.protocol;
        const host = window.location.hostname;
        const apiBaseUrl = `${protocol}//${host}/talas5/ClientData/WebServiceMap.asmx`;

        const params = new URLSearchParams(window.location.search);
        const idMap = params.get("m");

        const url = `${apiBaseUrl}/GisStationsStatic?idMap=${idMap}`;
        console.log("🌐 Geräte-API:", url);

        const response = await fetch(url);
        const data = await response.json();

        setLocationDeviceData(data.Points || []);
        if (data.Points && data.Points.length > 0) {
          setDeviceName(data.Points[0].LD_Name);
        }
      } catch (error) {
        console.error("❌ Fehler beim Abrufen der Gerätedaten:", error);
      }
    };

    fetchPoiTypData();
    fetchDeviceData();
  }, []);

  return {
    poiTypData,
    isPoiTypLoaded,
    deviceName,
    setDeviceName,
    locationDeviceData,
    setLocationDeviceData,
    priorityConfig,
    setPriorityConfig,
    menuItemAdded,
    setMenuItemAdded,
    poiLayerVisible,
  };
};
