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

const TIPOS = [
  'actividades_completadas',
  'streak_dias',
  'minutos_acumulados',
  'puntos_acumulados',
];

// Crear
const createInsigniaValidator = [
  body('nombre').isString().trim().notEmpty().withMessage('nombre requerido'),
  body('descripcion').optional().isString().trim().isLength({ max: 1000 }),
  body('criterio_tipo')
    .isIn(TIPOS)
    .withMessage(`criterio_tipo debe ser uno de: ${TIPOS.join(', ')}`),
  body('criterio_valor').isInt({ gt: 0 }).withMessage('criterio_valor > 0'),
  body('icono').optional().isString().isLength({ max: 255 }),
];

// Actualizar (parcial)
const updateInsigniaValidator = [
  param('id').isInt({ gt: 0 }).withMessage('ID inválido'),
  body('nombre').optional().isString().trim().notEmpty(),
  body('descripcion').optional().isString().trim().isLength({ max: 1000 }),
  body('criterio_tipo').optional().isIn(TIPOS),
  body('criterio_valor').optional().isInt({ gt: 0 }),
  body('icono').optional().isString().isLength({ max: 255 }),
];

// Por id
const insigniaIdValidator = [
  param('id').isInt({ gt: 0 }).withMessage('ID inválido'),
];

// Listar con filtros opcionales ?tipo= & ?min_valor=
const listInsigniasValidator = [
  query('tipo').optional().isIn(TIPOS),
  query('min_valor').optional().isInt({ gt: 0 }),
];

module.exports = {
  createInsigniaValidator,
  updateInsigniaValidator,
  insigniaIdValidator,
  listInsigniasValidator,
};
