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

// Estados EXACTOS de tu tabla
const ESTADOS = ['pendiente', 'realizada', 'omitida', 'reprogramada'];

const createAgendaValidator = [
  body('id_usuario').isInt({ gt: 0 }).withMessage('id_usuario > 0'),
  body('id_actividad').isInt({ gt: 0 }).withMessage('id_actividad > 0'),
  body('fecha_programada').isISO8601().withMessage('fecha_programada inválida (ISO8601)'),
  body('estado').optional().isIn(ESTADOS),
];

const updateAgendaValidator = [
  param('id').isInt({ gt: 0 }),
  body('id_usuario').optional().isInt({ gt: 0 }),
  body('id_actividad').optional().isInt({ gt: 0 }),
  body('fecha_programada').optional().isISO8601(),
  body('estado').optional().isIn(ESTADOS),
];

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

const listAgendaValidator = [
  query('user_id').optional().isInt({ gt: 0 }),
  query('estado').optional().isIn(ESTADOS),
  query('desde').optional().isISO8601(),
  query('hasta').optional().isISO8601(),
];

// Iniciar desde agenda
const startAgendaValidator = [ param('id').isInt({ gt: 0 }) ];

// Finalizar desde agenda (incluye campos opcionales del registro)
const finishAgendaValidator = [
  param('id').isInt({ gt: 0 }),
  body('registro_id').isInt({ gt: 0 }).withMessage('registro_id requerido'),
  body('emocion').optional().isString().isLength({ max: 100 }),
  body('puntos_obtenidos').optional().isInt({ min: 0 }),
  body('comentario').optional().isString().isLength({ max: 1000 }),
];

module.exports = {
  createAgendaValidator,
  updateAgendaValidator,
  agendaIdValidator,
  listAgendaValidator,
  startAgendaValidator,
  finishAgendaValidator,
  ESTADOS,
};
