import { Request, Response, NextFunction } from 'express';
import { AppError } from '../errors/app-error';
import { env } from '../config/env';
import { logger } from '../utils/logger';

/* Le 4e argument est requis par Express pour identifier un gestionnaire d'erreurs,
   même s'il n'est pas utilisé. */
export function errorHandler(
  err: unknown,
  _req: Request,
  res: Response,
  _next: NextFunction,
): void {
  const isAppError = err instanceof AppError;
  const statusCode = isAppError ? err.statusCode : 500;
  const message = isAppError ? err.message : 'Erreur interne du serveur';

  if (!isAppError) {
    logger.error('Erreur non geree', err);
  }

  const exposeStack = env.nodeEnv === 'development' && err instanceof Error && !isAppError;

  res.status(statusCode).json({
    error: {
      message,
      ...(exposeStack ? { stack: err.stack } : {}),
    },
  });
}
