// /pages/api/cpl/updateDigitalInputs.ts import type { NextApiRequest, NextApiResponse } from "next"; import path from "path"; import fs from "fs"; const mode = process.env.NEXT_PUBLIC_CPL_MODE; // 1️⃣ Variable vorab definieren let mockFilePath: string | null = null; if (mode === "json") { mockFilePath = path.join( process.cwd(), "mocks", "api", "SERVICE", "digitalInputsMockData.json" ); } if (mode === "jsSimulatedProd") { mockFilePath = path.join( process.cwd(), "mocks", "device-cgi-simulator", "SERVICE", "digitalInputsMockData.js" ); } // 2️⃣ Sicherstellen, dass ein Modus aktiv ist if (!mockFilePath) { throw new Error(`❌ Kein gültiger Modus in .env gesetzt: ${mode}`); } // Funktion zum Parsen bei jsSimulatedProd function extractMockData(raw: string) { const func = new Function( "context", ` with (context) { ${raw} return { win_de_label, win_de_invert, win_de_state, win_de_counter, win_de_time_filter, win_de_weighting, win_de_counter_active, win_de_offline }; } ` ); return func({}); } export default async function handler( req: NextApiRequest, res: NextApiResponse ) { if (req.method !== "POST") { return res.status(405).json({ error: "Only POST supported" }); } try { const { id, label, invert, timeFilter, weighting, zaehlerAktiv, eingangOffline, } = req.body; if (typeof id !== "number" || id < 1 || id > 32) { return res.status(400).json({ error: "Ungültige ID (1–32 erlaubt)" }); } const rawContent = fs.readFileSync(mockFilePath!, "utf-8"); const data = mode === "json" ? JSON.parse(rawContent) : extractMockData(rawContent); if (typeof label === "string") data.win_de_label[id - 1] = label; if (typeof invert === "number") data.win_de_invert[id - 1] = invert; if (typeof timeFilter === "number") data.win_de_time_filter[id - 1] = timeFilter; if (typeof weighting === "number") data.win_de_weighting[id - 1] = weighting; if (typeof zaehlerAktiv === "number") data.win_de_counter_active[id - 1] = zaehlerAktiv; if (typeof eingangOffline === "number") data.win_de_offline[id - 1] = eingangOffline; if (mode === "json") { fs.writeFileSync(mockFilePath!, JSON.stringify(data, null, 2), "utf-8"); } else { const newContent = ` // auto-generated from update API var win_de_state = ${JSON.stringify(data.win_de_state, null, 2)}; var win_de_invert = ${JSON.stringify(data.win_de_invert, null, 2)}; var win_de_counter = ${JSON.stringify(data.win_de_counter, null, 2)}; var win_de_time_filter = ${JSON.stringify(data.win_de_time_filter, null, 2)}; var win_de_weighting = ${JSON.stringify(data.win_de_weighting, null, 2)}; var win_de_counter_active = ${JSON.stringify( data.win_de_counter_active, null, 2 )}; var win_de_offline = ${JSON.stringify(data.win_de_offline, null, 2)}; var win_de_label = ${JSON.stringify(data.win_de_label, null, 2)}; `; fs.writeFileSync(mockFilePath!, newContent, "utf-8"); } return res.status(200).json({ message: `Update erfolgreich für ID ${id}`, id, label, invert, timeFilter, weighting, eingangOffline, }); } catch (err: unknown) { if (err instanceof Error) { console.error("Fehler beim Schreiben:", err.message); } else { console.error("Unbekannter Fehler beim Schreiben:", err); } return res.status(500).json({ error: "Update fehlgeschlagen" }); } }