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

// GET /api/metricas/:id_usuario
const idUsuarioParamValidator = [param('id_usuario').isInt({ gt: 0 }).withMessage('id_usuario inválido')];

// POST /api/metricas  (crea fila inicial)
const createMetricasValidator = [
  body('id_usuario').isInt({ gt: 0 }).withMessage('id_usuario > 0'),
  body('nivel_actual').optional().isInt({ min: 1 }).withMessage('nivel_actual >= 1'),
];

// PUT /api/metricas/:id_usuario  (seteo directo / reemplazo parcial)
const updateMetricasValidator = [
  param('id_usuario').isInt({ gt: 0 }),
  body('actividades_completadas').optional().isInt({ min: 0 }),
  body('tiempo_total_minutos').optional().isInt({ min: 0 }),
  body('puntos_totales').optional().isInt({ min: 0 }),
  body('racha_dias').optional().isInt({ min: 0 }),
  body('nivel_actual').optional().isInt({ min: 1 }),
  body('porcentaje_avance').optional().isFloat({ min: 0, max: 100 }),
];

// PATCH /api/metricas/:id_usuario/increment  (sumar deltas tras actividad)
const incrementMetricasValidator = [
  param('id_usuario').isInt({ gt: 0 }),
  body('actividades_add').optional().isInt({ min: 0 }),
  body('minutos_add').optional().isInt({ min: 0 }),
  body('puntos_add').optional().isInt({ min: 0 }),
  body('racha_dias_add').optional().isInt({ min: 0 }),
  // Si envías true/false para resetear racha manualmente:
  body('reset_racha').optional().isBoolean(),
  // Si quieres forzar recálculo de nivel/porcentaje aunque puntos_add sea 0:
  body('recalcular_nivel').optional().isBoolean(),
];

// GET /api/metricas  (lista opcional)
const listMetricasValidator = [
  query('from_user_id').optional().isInt({ min: 1 }),
  query('limit').optional().isInt({ min: 1, max: 200 }),
];

module.exports = {
  idUsuarioParamValidator,
  createMetricasValidator,
  updateMetricasValidator,
  incrementMetricasValidator,
  listMetricasValidator,
};
