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

// Middleware para manejar errores de validación
const handleValidationErrors = (req, res, next) => {
  const errors = validationResult(req);
  
  if (!errors.isEmpty()) {
    return res.status(400).json({
      success: false,
      message: 'Errores de validación',
      errors: errors.array().map(error => ({
        field: error.path || error.param,
        message: error.msg,
        value: error.value
      }))
    });
  }
  
  next();
};

// Middleware de validación para login
const validateLogin = (req, res, next) => {
  const { email, password } = req.body;
  
  if (!email || !password) {
    return res.status(400).json({
      success: false,
      message: 'Email y password son requeridos'
    });
  }

  // Validar formato de email
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  if (!emailRegex.test(email)) {
    return res.status(400).json({
      success: false,
      message: 'Formato de email inválido'
    });
  }

  next();
};

// Middleware de validación para registro
const validateRegister = (req, res, next) => {
  const { Email, Password, Name } = req.body;
  
  if (!Email || !Password || !Name) {
    return res.status(400).json({
      success: false,
      message: 'Email, password y nombre son requeridos'
    });
  }

  // Validar formato de email
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  if (!emailRegex.test(Email)) {
    return res.status(400).json({
      success: false,
      message: 'Formato de email inválido'
    });
  }

  // Validar longitud de password
  if (Password.length < 2) {
    return res.status(400).json({
      success: false,
      message: 'La contraseña debe tener al menos 2 caracteres'
    });
  }

  next();
};

// Middleware de validación para cambio de contraseña
const validatePasswordChange = (req, res, next) => {
  const { oldPassword, newPassword } = req.body;
  
  if (!oldPassword || !newPassword) {
    return res.status(400).json({
      success: false,
      message: 'Contraseña actual y nueva contraseña son requeridas'
    });
  }

  if (newPassword.length < 6) {
    return res.status(400).json({
      success: false,
      message: 'La nueva contraseña debe tener al menos 6 caracteres'
    });
  }

  next();
};

const validateResetPassword = (req, res, next) => {
  const { newPassword } = req.body;
  
  if (!newPassword) {
    return res.status(400).json({
      success: false,
      message: 'Nueva contraseña es requerida'
    });
  }

  if (newPassword.length < 2) {
    return res.status(400).json({
      success: false,
      message: 'La contraseña debe tener al menos 2 caracteres'
    });
  }

  next();
};



module.exports = {
  handleValidationErrors,
  validateLogin,
  validateRegister,
  validatePasswordChange,
  validateResetPassword
};