import { NextFunction, Request, Response } from "express";
import { LoginControlleur } from "../controleurs/loginControleur";
import { COOKIE_TOKEN } from "../utils/constant";

/**
 * S'assure qu'un utilisateur soit authentifier pour utiliser le point d'entrée associé.
 *
 * Lorsqu'il est authentifié, ce middleware injecte l'objet user (Etudiant|Enseignant)
 * dans la Request. Ceci est accessible avec `req.body.user`
 */
export async function authenticate(
  req: Request,
  res: Response,
  next: NextFunction
) {
  try {
    let token = req.cookies[COOKIE_TOKEN];
    if (!token) res.redirect("/login");
    let _loginControleur = new LoginControlleur();
    let user = await _loginControleur.getUtilisateur(token);
    if (!user) res.redirect("/login");
    req.body.user = user;

    next();
  } catch (e) {
    console.warn(e.message);
    // TODO : voir retourne un erreur avec les test Github
    res.redirect("/login");
  }
}
