// src/validators/registroActividad.validators.js
const { body, param, query } = require('express-validator');

// Ajusta esta lista a los valores reales del ENUM en tu tabla
const EMOCIONES = ['feliz', 'neutral', 'triste', 'ansioso', 'motivado', 'cansado'];

const createRegistroValidator = [
  body('id_usuario').isInt({ gt: 0 }).withMessage('id_usuario > 0'),
  body('id_actividad').isInt({ gt: 0 }).withMessage('id_actividad > 0'),
  body('fecha_inicio').optional().isISO8601().withMessage('fecha_inicio inválida'),
  body('emocion').optional().isIn(EMOCIONES).withMessage(`emocion debe ser: ${EMOCIONES.join(', ')}`),
  body('completada').optional().isInt({ min: 0, max: 1 }),
  body('puntos_obtenidos').optional().isInt({ min: 0 }),
  body('comentario').optional().isString().isLength({ max: 5000 }),
];

const updateRegistroValidator = [
  param('id').isInt({ gt: 0 }).withMessage('ID inválido'),
  body('id_usuario').optional().isInt({ gt: 0 }),
  body('id_actividad').optional().isInt({ gt: 0 }),
  body('fecha_inicio').optional().isISO8601(),
  body('fecha_fin').optional().isISO8601(),
  body('emocion').optional().isIn(EMOCIONES),
  body('completada').optional().isInt({ min: 0, max: 1 }),
  body('puntos_obtenidos').optional().isInt({ min: 0 }),
  body('comentario').optional().isString().isLength({ max: 5000 }),
];

const registroIdValidator = [ param('id').isInt({ gt: 0 }) ];

const listRegistrosValidator = [
  query('user_id').optional().isInt({ gt: 0 }),
  query('actividad_id').optional().isInt({ gt: 0 }),
  query('completada').optional().isInt({ min: 0, max: 1 }),
  query('desde').optional().isISO8601(),
  query('hasta').optional().isISO8601(),
];

const finishRegistroValidator = [
  param('id').isInt({ gt: 0 }),
  body('emocion').optional().isIn(EMOCIONES),
  body('puntos_obtenidos').optional().isInt({ min: 0 }),
  body('comentario').optional().isString().isLength({ max: 5000 }),
];

module.exports = {
  createRegistroValidator,
  updateRegistroValidator,
  registroIdValidator,
  listRegistrosValidator,
  finishRegistroValidator,
  EMOCIONES,
};
