AbiertasCutún2026-06-13T22:34:26+00:00
/**
* Determina la recomendación de talle según las reglas de negocio.
* * @param {Array} tallesUsuarios - Array con los 3 talles de los usuarios (ej: [36, 40, 42])
* @param {number} rangoMinimo - El talle mínimo del rango actual (ej: 38)
* @param {number} rangoMaximo - El talle máximo del rango actual (ej: 44)
* @param {string} modeloBota - El modelo actual (ej: 'Access', 'Clutch')
* @param {boolean} tieneRangoAnterior - Si existe o no un rango más chico en el sistema
* @returns {Object} Objeto con la recomendación y el estilo visual correspondiente
*/
function calcularRecomendacionTalle(tallesUsuarios, rangoMinimo, rangoMaximo, modeloBota, tieneRangoAnterior = true) {
// 1. Identificar si hay algún usuario por debajo del mínimo
// Buscamos si alguien está exactamente 1 o 2 talles por debajo
const talleMenosUno = tallesUsuarios.find(talle => talle === (rangoMinimo - 1));
const talleMenosDos = tallesUsuarios.find(talle => talle === (rangoMinimo - 2));
// 2. Contar cuántos usuarios están PERFECTAMENTE dentro del rango
const usuariosDentroDelRango = tallesUsuarios.filter(talle => talle >= rangoMinimo && talle <= rangoMaximo).length;
// --- REGLA 1: 2 talles por debajo y los otros 2 adentro ---
if (talleMenosDos && usuariosDentroDelRango === 2) {
// Excepción: Si es 'Access' y no hay rango menor (ej: rango 2-5)
if (modeloBota.toLowerCase() === 'access' && !tieneRangoAnterior) {
return {
mensaje: El usuario de talle ${talleMenosDos} debería elegir la bota Clutch en ese talle.,
estilo: { color: 'black', fontWeight: 'normal' }
};
}
// Comportamiento estándar para 2 talles por debajo
return {
mensaje: ¡Atención! Se recomienda el rango de talle anterior para el usuario de talle ${talleMenosDos}.,
estilo: { color: 'red', fontWeight: 'bold' } // Llamada de atención
};
}
// --- REGLA 2: 1 talle por debajo y los otros 2 adentro ---
if (talleMenosUno && usuariosDentroDelRango === 2) {
return {
mensaje: Para el usuario de talle ${talleMenosUno}, se recomienda utilizar una media 3/4 para lograr un calce más ajustado.,
estilo: { color: 'black', fontWeight: 'normal' }
};
}
// --- CASO POR DEFECTO: Todos conformes o no aplica ninguna regla especial ---
return {
mensaje: "Todos los usuarios están dentro del rango óptimo o no requieren ajustes especiales.",
estilo: { color: 'black', fontWeight: 'normal' }
};
}
// ==========================================
// EJEMPLOS DE PRUEBA (TESTS)
// ==========================================
console.log("--- Prueba 1: 2 talles por debajo (Debería dar ROJO) ---");
const test1 = calcularRecomendacionTalle([36, 40, 42], 38, 44, 'Generic');
console.log(Mensaje: ${test1.mensaje});
console.log(Estilos aplicados:, test1.estilo);
console.log("\n--- Prueba 2: Excepción bota Access sin rango menor (Debería sugerir Clutch) ---");
const test2 = calcularRecomendacionTalle([2, 6, 7], 4, 10, 'Access', false);
console.log(Mensaje: ${test2.mensaje});
console.log(Estilos aplicados:, test2.estilo);
console.log("\n--- Prueba 3: 1 talle por debajo (Debería sugerir media 3/4) ---");
const test3 = calcularRecomendacionTalle([37, 40, 42], 38, 44, 'Access');
console.log(Mensaje: ${test3.mensaje});

