// ✅ Service: /services/fetchDigitalInputsService.ts export const fetchDigitalInputsService = async () => { const mode = process.env.NEXT_PUBLIC_CPL_MODE; // ✅ PRODUKTIV: lädt JavaScript vom Gerät über CGI if (mode === "production") { const scriptUrl = "/CPL?/CPL/SERVICE/digitalInputs.js"; await new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = scriptUrl; script.async = true; script.onload = () => resolve(); script.onerror = () => reject("❌ Fehler beim Laden der digitalen Eingänge (production)"); document.body.appendChild(script); }); const win = window as any; return Array.from({ length: 32 }, (_, i) => ({ id: i + 1, value: win.win_de_state[i], label: win.win_de_label[i], invert: !!win.win_de_invert[i], counter: win.win_de_counter[i], timeFilter: win.win_de_time_filter[i], weighting: win.win_de_weighting[i], counterActive: !!win.win_de_counter_active[i], eingangOffline: !!win.win_de_offline[i], status: !!win.win_de_state[i], })); } // ✅ JSON-MODUS (API gibt JSON-Daten zurück) if (mode === "json") { const res = await fetch("/api/cpl/getDigitalInputsHandler"); if (!res.ok) throw new Error("❌ Fehler beim Laden der digitalen Eingänge (json)"); const data = await res.json(); console.log("📡 JSON-Daten geladen in service:", data); return data.win_de_state.map((_: any, i: number) => ({ id: i + 1, value: data.win_de_state[i], label: data.win_de_label[i], invert: !!data.win_de_invert[i], counter: data.win_de_counter[i], timeFilter: data.win_de_time_filter[i], weighting: data.win_de_weighting[i], counterActive: !!data.win_de_counter_active[i], eingangOffline: !!data.win_de_offline[i], status: !!data.win_de_state[i], })); } // ✅ JSMOCK-MODUS (Script einbinden und aus window lesen) if (mode === "jsmock") { const res = await fetch("/api/cpl/getDigitalInputsHandler"); if (!res.ok) throw new Error("❌ Fehler beim Laden der digitalen Eingänge (json)"); const data = await res.json(); console.log("📡 JSMOCK-Daten geladen in service:", data); return data.win_de_state.map((_: any, i: number) => ({ id: i + 1, value: data.win_de_state[i], label: data.win_de_label[i], invert: !!data.win_de_invert[i], counter: data.win_de_counter[i], timeFilter: data.win_de_time_filter[i], weighting: data.win_de_weighting[i], counterActive: !!data.win_de_counter_active[i], eingangOffline: !!data.win_de_offline[i], status: !!data.win_de_state[i], })); } // ❌ Unbekannter Modus throw new Error(`❌ Unbekannter NEXT_PUBLIC_CPL_MODE: ${mode}`); };