Source: routes/admin.routes.js

const express = require("express");
const router = express.Router();
const User = require("../models/user");
const Category = require("../models/category");
const jwt = require("jsonwebtoken");

/**
 * 🔐 Middleware de vérification admin
 * Gère les deux cas possibles :
 * - role: "admin"
 * - roles: ["admin", "vendeur"]
 */
function requireAdmin(req, res, next) {
  const token = req.cookies.token;
  if (!token) {
    console.warn("❌ Tentative d'accès sans token admin");
    return res.status(401).json({ message: "Unauthorized" });
  }

  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);

    // ✅ Vérifie si l'utilisateur est admin
    const isAdmin =
      decoded.role === "admin" ||
      (Array.isArray(decoded.roles) && decoded.roles.includes("admin"));

    if (!isAdmin) {
      console.warn("🚫 Accès refusé - utilisateur non admin :", decoded);
      return res.status(403).json({ message: "Forbidden" });
    }

    req.user = decoded;
    next();
  } catch (err) {
    console.error("❌ Erreur de vérification du token admin:", err.message);
    return res.status(401).json({ message: "Invalid token" });
  }
}

// ✅ Appliquer le middleware à toutes les routes admin
router.use(requireAdmin);

/**
 * 🧍 Récupérer tous les utilisateurs
 */
router.get("/users", async (_, res) => {
  try {
    const users = await User.find().select("-password");
    res.json(users);
  } catch (err) {
    console.error("Erreur /users :", err.message);
    res.status(500).json({ message: "Erreur lors du chargement des utilisateurs" });
  }
});

/**
 * 🧍 Supprimer un utilisateur
 */
router.delete("/users/:id", async (req, res) => {
  try {
    await User.findByIdAndDelete(req.params.id);
    res.json({ ok: true });
  } catch (err) {
    console.error("Erreur suppression utilisateur :", err.message);
    res.status(500).json({ message: "Erreur lors de la suppression" });
  }
});

/**
 * 🗂 Récupérer les catégories
 */
router.get("/categories", async (req, res) => {
  try {
    const type = req.query.type || "produit";
    const cats = await Category.find({ type });
    res.json(cats);
  } catch (err) {
    console.error("Erreur /categories :", err.message);
    res.status(500).json({ message: "Erreur lors du chargement des catégories" });
  }
});

/**
 * 🗂 Créer une nouvelle catégorie
 */
router.post("/categories", async (req, res) => {
  try {
    const { name, type } = req.body;
    if (!name || !type) {
      return res.status(400).json({ message: "name et type sont requis" });
    }
    const cat = await Category.create({ name, type });
    res.status(201).json(cat);
  } catch (err) {
    console.error("Erreur création catégorie :", err.message);
    res.status(500).json({ message: "Erreur lors de la création" });
  }
});

// 🗑 Supprimer une catégorie
router.delete("/categories/:id", async (req, res) => {
  try {
    const deleted = await Category.findByIdAndDelete(req.params.id);
    if (!deleted) return res.status(404).json({ message: "Catégorie introuvable" });
    res.json({ ok: true });
  } catch (err) {
    console.error("❌ Erreur suppression catégorie :", err.message);
    res.status(500).json({ message: "Erreur suppression catégorie" });
  }
});


module.exports = router;