/**
 * ========================================
 * MIDDLEWARE: handleValidation
 * ========================================
 *
 * Middleware que procesa los resultados de validación de express-validator.
 * Se usa DESPUÉS de los validadores para verificar si hubo errores.
 *
 * FLUJO DE EJECUCIÓN:
 * 1. Los validadores (ej: registerValidator) marcan errores
 * 2. Este middleware recoge esos errores con validationResult()
 * 3. Si hay errores, devuelve 400 con la lista de errores
 * 4. Si no hay errores, continúa a la ruta
 *
 * ORIGEN: Se importa en las rutas que usan validadores
 * DESTINO: Si hay errores, termina con 400; si no, continúa a la lógica de la ruta
 *
 * EJEMPLO DE USO:
 *   const { registerValidator } = require('../validators/auth.validators');
 *   router.post('/register', registerValidator, handleValidation, async (req, res) => {
 *     // Si llega aquí, los datos ya fueron validados
 *   });
 *
 * FORMATO DE RESPUESTA CON ERRORES:
 *   {
 *     "errors": [
 *       { "msg": "Email inválido", "param": "email", "location": "body" },
 *       { "msg": "Password muy corta", "param": "password", "location": "body" }
 *     ]
 *   }
 */

const { validationResult } = require('express-validator');

/**
 * @param {Request} req - Objeto de petición Express
 * @param {Response} res - Objeto de respuesta Express
 * @param {Function} next - Función para continuar al siguiente middleware
 */
module.exports = function handleValidation(req, res, next) {
  try {
    // 1. Extrae los errores de validación acumulados por express-validator
    const errors = validationResult(req);

    // 2. Si hay errores, devuelve 400 Bad Request con la lista
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }

    // 3. Si no hay errores, continúa a la siguiente función (la ruta)
    return next();

  } catch (e) {
    // 4. Si algo falla, pasa el error al manejador de errores de Express
    return next(e);
  }
};
