const { requireAuth, requireAdmin } = require("../middleware/auth"); // Falls Middleware in einer extra Datei liegt
const express = require("express");
const pool = require("../db"); // Stelle sicher, dass dein DB-Pool importiert wird

const router = express.Router();

// Spieleliste
router.get("/:id?", async (req, res) => {
  const { id } = req.params;

  try {
    let result;

    if (id) {
      // Falls eine ID übergeben wurde, geben wir alle Felder des Spiels zurück
      result = await pool.query("SELECT * FROM spiele WHERE id = $1", [id]);

      if (result.rows.length === 0) {
        return res.status(404).json({ error: "Spiel nicht gefunden" });
      }

      return res.json(result.rows[0]);
    } else {
      // Falls keine ID übergeben wurde, geben wir nur ID und Name zurück
      result = await pool.query(
        "SELECT id, name FROM spiele ORDER BY name ASC"
      );
      return res.json(result.rows);
    }
  } catch (err) {
    console.error(err);
    res.status(500).json({ error: "Interner Serverfehler" });
  }
});

// **2. Spiel löschen (Nur für Admins)**
router.delete("/:id", requireAuth, requireAdmin, async (req, res) => {
  const { id } = req.params;

  try {
    // Prüfen, ob das Spiel existiert
    const spielResult = await pool.query(
      "SELECT id, name FROM spiele WHERE id = $1",
      [id]
    );

    if (spielResult.rows.length === 0) {
      return res.status(404).json({ error: "Spiel nicht gefunden" });
    }

    // Spiel löschen
    await pool.query("DELETE FROM spiele WHERE id = $1", [id]);

    res.json({
      message: "Spiel erfolgreich gelöscht",
      spiel: spielResult.rows[0],
    });
  } catch (err) {
    console.error(err);
    res.status(500).json({ error: "Interner Serverfehler" });
  }
});

router.put("/:id?", requireAuth, async (req, res) => {
  const { id } = req.params;
  const { name, material, regeln, variationen, dauer, type } = req.body;

  try {
    let result;

    if (id) {
      // **Spiel aktualisieren** → Alle Felder müssen übergeben werden
      if (!name || !material || !regeln || !variationen || !dauer || !type) {
        return res.status(400).json({ error: "Alle Felder sind erforderlich" });
      }

      result = await pool.query(
        `UPDATE spiele 
                 SET name = $1, material = $2, regeln = $3, variationen = $4, dauer = $5, type = $6 
                 WHERE id = $7 
                 RETURNING *`,
        [name, material, regeln, variationen, dauer, type, id]
      );

      if (result.rows.length === 0) {
        return res.status(404).json({ error: "Spiel nicht gefunden" });
      }

      return res.json({
        message: "Spiel erfolgreich aktualisiert",
        spiel: result.rows[0],
      });
    } else {
      // **Neues Spiel anlegen** → Nur `name` ist erforderlich
      if (!name) {
        return res
          .status(400)
          .json({ error: "Der Name des Spiels ist erforderlich" });
      }

      result = await pool.query(
        `INSERT INTO spiele (name) 
                 VALUES ($1) 
                 RETURNING *`,
        [name]
      );

      return res
        .status(201)
        .json({ message: "Spiel erfolgreich angelegt", spiel: result.rows[0] });
    }
  } catch (err) {
    console.error(err);
    res.status(500).json({ error: "Interner Serverfehler" });
  }
});

module.exports = router;