function requireLogin(req, res, next) {
  if (!req.session.user) {
    return res.redirect("/");
  }

  req.user = req.session.user;
  next();
}

// ── Hilfsfunktion: Zugriff verweigern mit Flash + Redirect ────────────────────
function denyAccess(req, res, message) {
  // Zurück zur vorherigen Seite, oder zum Dashboard
  const back = req.get("Referrer") || "/dashboard";

  req.session.flash = req.session.flash || [];
  req.session.flash.push({ type: "danger", message });

  return res.redirect(back);
}

// ✅ Arzt-only
function requireArzt(req, res, next) {
  if (!req.session.user) return res.redirect("/");

  if (req.session.user.role !== "arzt") {
    return denyAccess(req, res, "⛔ Kein Zugriff – diese Seite ist nur für Ärzte.");
  }

  req.user = req.session.user;
  next();
}

// ✅ Admin-only
function requireAdmin(req, res, next) {
  if (!req.session.user) return res.redirect("/");

  if (req.session.user.role !== "admin") {
    return denyAccess(req, res, "⛔ Kein Zugriff – diese Seite ist nur für Administratoren.");
  }

  req.user = req.session.user;
  next();
}

// ✅ Arzt + Mitarbeiter
function requireArztOrMitarbeiter(req, res, next) {
  if (!req.session.user) return res.redirect("/");

  const allowed = ["arzt", "mitarbeiter"];

  if (!allowed.includes(req.session.user.role)) {
    return denyAccess(req, res, "⛔ Kein Zugriff – diese Seite ist nur für Ärzte und Mitarbeiter.");
  }

  req.user = req.session.user;
  next();
}

module.exports = {
  requireLogin,
  requireArzt,
  requireAdmin,
  requireArztOrMitarbeiter,
};
