// /pages/api/cpl/updateDigitaleEingaenge.ts
import type { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs";

// WICHTIG: Der Mock-Datenpfad
const mockFilePath = path.join(
  process.cwd(),
  "apiMockData",
  "SERVICE",
  "digitaleEingaengeMockData.js"
);

// Funktion zum Parsen des JS-Datei-Inhalts in ein eval-fähiges Objekt
function extractMockData(raw: string) {
  const context = {};
  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, name, invertierung, filterzeit, gewichtung, zaehlerAktiv } =
      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 = extractMockData(rawContent);

    // Update der Daten
    if (typeof name === "string") data.win_de_label[id - 1] = name;
    if (typeof invertierung === "number")
      data.win_de_invert[id - 1] = invertierung;
    if (typeof filterzeit === "number")
      data.win_de_time_filter[id - 1] = filterzeit;
    if (typeof gewichtung === "number")
      data.win_de_weighting[id - 1] = gewichtung;
    if (typeof zaehlerAktiv === "number")
      data.win_de_counter_active[id - 1] = zaehlerAktiv;

    if (typeof invertierung === "number")
      data.win_de_invert[id - 1] = invertierung;

    // Erzeuge neuen Dateiinhalt
    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", id, name, invertierung });
  } catch (err: any) {
    console.error("Fehler beim Schreiben:", err);
    return res.status(500).json({ error: "Update fehlgeschlagen" });
  }
}
