// services/fetchKvzDataService.ts
import { KvzData } from "../pages/api/kvz/data";

/**
 * Überprüft, ob wir in der Entwicklungsumgebung sind
 */
const isDevelopment = process.env.NODE_ENV === "development";

/**
 * Holt KVZ-Daten vom Server
 * In der Entwicklungsumgebung: API-Route verwenden
 * In der Produktionsumgebung: Direkt JSON-Datei laden
 */
export const fetchKvzData = async (): Promise<KvzData> => {
  try {
    let response: Response;

    if (isDevelopment) {
      // Entwicklungsumgebung: API-Route verwenden
      response = await fetch("/api/kvz/data");
    } else {
      // Produktionsumgebung: Direkt JSON-Datei aus public laden
      response = await fetch("/CPL/kvz/kvzData.json");
    }

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const data: KvzData = await response.json();
    return data;
  } catch (error) {
    console.error("Fehler beim Laden der KVZ-Daten:", error);
    throw error;
  }
};

/**
 * Aktualisiert KVZ-Einstellungen auf dem Server
 * In der Entwicklungsumgebung: API-Route verwenden
 * In der Produktionsumgebung: Nur lokale Aktualisierung (keine Persistierung)
 */
export const updateKvzSettings = async (
  updates: Array<{
    key: "kvzPresence" | "kvzActive" | "kvzStatus";
    slot?: number;
    ledIndex?: number;
    value: number;
  }>
): Promise<KvzData> => {
  try {
    if (isDevelopment) {
      // Entwicklungsumgebung: API-Route verwenden
      const response = await fetch("/api/kvz/updateSettings", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ updates }),
      });

      if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
      }

      const data: KvzData = await response.json();
      return data;
    } else {
      // Produktionsumgebung: Warnung ausgeben und aktuelle Daten zurückgeben
      console.warn(
        "KVZ-Updates sind in der Produktionsumgebung nicht verfügbar. Änderungen werden nur lokal gespeichert."
      );

      // Aktuelle Daten laden und zurückgeben
      return await fetchKvzData();
    }
  } catch (error) {
    console.error("Fehler beim Update der KVZ-Einstellungen:", error);
    throw error;
  }
};
