// /pages/api/cpl/updateDigitalOutputshandler.ts

import fs from "fs";
import path from "path";
import type { NextApiRequest, NextApiResponse } from "next";

export default function handler(req: NextApiRequest, res: NextApiResponse) {
  if (req.method !== "POST") {
    return res.status(405).json({ message: "Nur POST erlaubt" });
  }

  const { outputs } = req.body;

  if (!Array.isArray(outputs)) {
    return res.status(400).json({ error: "Ungültige Datenstruktur" });
  }

  const mode = process.env.NEXT_PUBLIC_CPL_MODE;

  const jsonData = {
    win_da_state: outputs.map((o) => (o.status ? 1 : 0)),
    win_da_bezeichnung: outputs.map((o) => o.label),
  };

  let filePath = "";

  if (mode === "json") {
    filePath = path.join(
      process.cwd(),
      "mocks",
      "api",
      "SERVICE",
      "digitalOutputsMockData.json"
    );

    try {
      fs.mkdirSync(path.dirname(filePath), { recursive: true });
      fs.writeFileSync(filePath, JSON.stringify(jsonData, null, 2), "utf-8");

      console.log("✅ Datei (JSON) geschrieben:", filePath);
      res.status(200).json({ success: true });
    } catch (err) {
      console.error("❌ Fehler beim Schreiben der JSON-Datei:", err);
      res.status(500).json({ error: "Fehler beim Schreiben der Datei" });
    }
  } else if (mode === "jsSimulatedProd") {
    filePath = path.join(
      process.cwd(),
      "mocks",
      "device-cgi-simulator",
      "SERVICE",
      "digitalOutputsMockData.js"
    );

    const jsContent =
      `win_da_state = [${jsonData.win_da_state.join(", ")}];\n` +
      `win_da_bezeichnung = [${jsonData.win_da_bezeichnung
        .map((s) => `"${s}"`)
        .join(", ")}];\n`;

    try {
      fs.mkdirSync(path.dirname(filePath), { recursive: true });
      fs.writeFileSync(filePath, jsContent, "utf-8");

      console.log("✅ Datei (JS-Mock) geschrieben:", filePath);
      res.status(200).json({ success: true });
    } catch (err) {
      console.error("❌ Fehler beim Schreiben der JS-Datei:", err);
      res.status(500).json({ error: "Fehler beim Schreiben der JS-Datei" });
    }
  } else {
    res
      .status(403)
      .json({ error: "In production ist Schreiben nicht erlaubt" });
  }
}
