import { Request, Response, NextFunction } from 'express';
import { AppError } from '../errors/app-error';
import { findByEmail } from '../repositories/utilisateur.repository';
import { AuthenticatedUser } from '../types/authenticated-user';

/* Auth simulée (temporaire) : en attendant Azure AD, l'utilisateur courant est
   résolu depuis l'en-tête `x-user-email`. À remplacer par la validation du JWT. */
export async function currentUser(req: Request, _res: Response, next: NextFunction): Promise<void> {
  const email = req.header('x-user-email');
  if (!email) {
    throw new AppError(401, 'En-tete x-user-email requis (auth simulee)');
  }

  const utilisateur = await findByEmail(email);
  if (!utilisateur || !utilisateur.actif) {
    throw new AppError(401, 'Utilisateur non reconnu');
  }

  const authenticated: AuthenticatedUser = {
    id: utilisateur.id,
    email: utilisateur.email,
    roleCode: utilisateur.role.code,
    campusId: utilisateur.campusId,
  };

  req.user = authenticated;
  next();
}
