"use client"; // /components/modules/kue705FO/charts/ChartSwitcher.tsx

import React, { useState, useEffect } from "react";
import ReactModal from "react-modal";
import LoopChartActionBar from "./LoopMeasurementChart/LoopChartActionBar";
import TDRChartActionBar from "./TDRChart/TDRChartActionBar";
import LoopMeasurementChart from "./LoopMeasurementChart/LoopMeasurementChart";
import TDRChart from "./TDRChart/TDRChart";
import { useSelector, useDispatch } from "react-redux";
import { AppDispatch } from "../../../../../redux/store";
import { RootState } from "../../../../../redux/store";
import {
  setChartOpen,
  setFullScreen,
} from "../../../../../redux/slices/kabelueberwachungChartSlice";
import {
  setSelectedSlot,
  setSelectedChartType,
} from "../../../../../redux/slices/tdrChartSlice";
import { resetBrushRange } from "../../../../../redux/slices/brushSlice";
import { fetchTDMDataBySlotThunk } from "../../../../../redux/thunks/fetchTDMListBySlotThunk";
import { useLoopChartLoader } from "./LoopMeasurementChart/LoopChartActionBar";

import {
  setVonDatum,
  setBisDatum,
  setSelectedMode,
  setSelectedSlotType,
} from "../../../../../redux/slices/kabelueberwachungChartSlice";

interface ChartSwitcherProps {
  isOpen: boolean;
  onClose: () => void;
  slotIndex: number;
}

const ChartSwitcher: React.FC<ChartSwitcherProps> = ({
  isOpen,
  onClose,
  slotIndex,
}) => {
  const dispatch = useDispatch<AppDispatch>();
  const chartTitle = useSelector(
    (state: RootState) => state.loopChartType.chartTitle
  );

  // **Redux-States für aktive Messkurve (TDR oder Schleife)**
  const activeMode = useSelector(
    (state: RootState) => state.kueChartModeSlice.activeMode
  );
  const isFullScreen = useSelector(
    (state: RootState) => state.kabelueberwachungChartSlice.isFullScreen
  );

  // **Modal schließen + Redux-Status zurücksetzen**
  const handleClose = () => {
    const today = new Date();
    const thirtyDaysAgo = new Date();
    thirtyDaysAgo.setDate(today.getDate() - 30);

    const toISO = (date: Date) => date.toLocaleDateString("sv-SE");

    // Reset Datum
    dispatch(setVonDatum(toISO(thirtyDaysAgo)));
    dispatch(setBisDatum(toISO(today)));

    // Reset Dropdowns
    dispatch(setSelectedMode("DIA0"));
    dispatch(setSelectedSlotType("isolationswiderstand"));

    // Sonstiges Reset
    dispatch(setChartOpen(false));
    dispatch(setFullScreen(false));
    dispatch(resetBrushRange());

    onClose();
  };

  // **Vollbildmodus umschalten**
  const toggleFullScreen = () => {
    dispatch(setFullScreen(!isFullScreen));
  };

  // **Slot und Messkurve setzen**
  const setChartType = (chartType: "TDR" | "Schleife") => {
    dispatch(setSelectedSlot(slotIndex));
    dispatch(setSelectedChartType(chartType));
  };
  //-------------------------------------
  /* 
  useEffect(() => {
    //dispatch(fetchAllTDRChartData()); // Erstes Laden

    const interval = setInterval(() => {
      //dispatch(fetchAllTDRChartData());
    }, 10000); // Alle 10 Sekunden neue Daten abrufen

    return () => clearInterval(interval); // Cleanup, wenn Komponente entladen wird
  }, [dispatch]);
 */
  //-------------------------------------
  const { loadLoopChartData } = useLoopChartLoader();
  useEffect(() => {
    if (isOpen && activeMode === "Schleife") {
      loadLoopChartData();
    }
  }, [isOpen, activeMode]);
  //-------------------------------------
  const slotNumber = useSelector(
    (state: RootState) => state.kabelueberwachungChartSlice.slotNumber
  );

  // immmer beim önnen das Modal die letzte 30 Tage anzeigen
  useEffect(() => {
    if (isOpen && activeMode === "Schleife" && slotNumber !== null) {
      const today = new Date();
      const thirtyDaysAgo = new Date();
      thirtyDaysAgo.setDate(today.getDate() - 30);

      const toISO = (date: Date) => date.toLocaleDateString("sv-SE"); // YYYY-MM-DD

      dispatch(setVonDatum(toISO(thirtyDaysAgo)));
      dispatch(setBisDatum(toISO(today)));

      // Warten, bis Redux gesetzt ist → dann Daten laden
      setTimeout(() => {
        loadLoopChartData();
      }, 10); // kleiner Delay, damit Redux-State sicher aktualisiert ist
    }
  }, [isOpen, activeMode, slotNumber]);

  //-----------------------------------------
  return (
    <ReactModal
      isOpen={isOpen}
      onRequestClose={handleClose}
      ariaHideApp={false}
      style={{
        overlay: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
        content: {
          top: "50%",
          left: "50%",
          bottom: "auto",
          marginRight: "-50%",
          transform: "translate(-50%, -50%)",
          width: isFullScreen ? "90vw" : "70rem",
          height: isFullScreen ? "90vh" : "35rem",
          padding: "1rem",
          transition: "all 0.3s ease-in-out",
          display: "flex",
          flexDirection: "column",
        },
      }}
    >
      {/* Action-Buttons */}
      <div
        style={{
          position: "absolute",
          top: "0.625rem",
          right: "0.625rem",
          display: "flex",
          gap: "0.75rem",
        }}
      >
        {/* Fullscreen-Button */}
        <button
          onClick={toggleFullScreen}
          style={{
            background: "transparent",
            border: "none",
            fontSize: "1.5rem",
            cursor: "pointer",
          }}
        >
          <i
            className={
              isFullScreen ? "bi bi-fullscreen-exit" : "bi bi-arrows-fullscreen"
            }
          ></i>
        </button>

        {/* Schließen-Button */}
        <button
          onClick={handleClose}
          style={{
            background: "transparent",
            border: "none",
            fontSize: "1.5rem",
            cursor: "pointer",
          }}
        >
          <i className="bi bi-x-circle-fill"></i>
        </button>
      </div>

      {/* Chart-Container */}
      <div
        style={{
          flex: 1,
          display: "flex",
          flexDirection: "column",
          height: "100%",
        }}
      >
        {activeMode === "Schleife" ? (
          <>
            <h3 className="text-lg font-semibold">{chartTitle}</h3>
            <LoopChartActionBar />
            <div style={{ flex: 1, height: "90%" }}>
              <LoopMeasurementChart />
            </div>
          </>
        ) : (
          <>
            <h3 className="text-lg font-semibold">TDR-Messung</h3>
            <TDRChart isFullScreen={isFullScreen} />
          </>
        )}
      </div>
    </ReactModal>
  );
};

export default ChartSwitcher;
