/* MACU RACE 2026 — pricing & category logic */

// returns the list of distance options for a given age, or null if too young/old
function getDistancesForAge(age) {
  if (!age || age < 6 || age > 99) return null;

  if (age >= 6 && age <= 7)   return [{ id: 'babys',       name: "Baby's", label: "Baby's Macu Race Kids", desc: '80m · Pista de juego', cat: 'Babys' }];
  if (age >= 8 && age <= 9)   return [{ id: 'preinfantil', name: 'Pre-infantil', label: 'Preinfantil Kids', desc: '100m · Iniciación', cat: 'Preinfantil' }];
  if (age >= 10 && age <= 11) return [{ id: 'infantil',    name: 'Infantil', label: 'Infantil Kids', desc: '400m · Infantil', cat: 'Infantil' }];
  if (age >= 12 && age <= 13) return [{ id: 'teens',       name: 'Teens', label: 'Teens Kids', desc: '2 km · Teens', cat: 'Teens' }];

  if (age === 14)              return [
    { id: '5k', name: '5K', label: '5K', desc: 'Recorrido urbano · 5 km', cat: 'Infantil' },
    { id: 'pet', name: '5K Pet', label: '5K Pet Race', desc: 'Con tu mascota · 5 km', cat: 'Pet Race' },
  ];
  if (age >= 15 && age <= 17)  return [
    { id: '5k', name: '5K', label: '5K', desc: 'Recorrido urbano · 5 km', cat: 'Infantil' },
    { id: '10k', name: '10K', label: '10K', desc: 'Reto medio · 10 km', cat: 'Juvenil' },
    { id: 'pet', name: '5K Pet', label: '5K Pet Race', desc: 'Con tu mascota · 5 km', cat: 'Pet Race' },
  ];
  if (age >= 18 && age <= 38)  return [
    { id: '5k', name: '5K', label: '5K', desc: 'Recorrido urbano · 5 km', cat: 'Mayores' },
    { id: '10k', name: '10K', label: '10K', desc: 'Reto medio · 10 km', cat: 'Mayores' },
    { id: '15k', name: '15K', label: '15K', desc: 'Ruta larga · 15 km', cat: 'Mayores' },
    { id: 'pet', name: '5K Pet', label: '5K Pet Race', desc: 'Con tu mascota · 5 km', cat: 'Pet Race' },
    { id: 'elite', name: 'Élite', label: 'Élite', desc: 'Atletas federados', cat: 'Élite' },
  ];
  if (age === 39)              return [
    { id: '5k', name: '5K', label: '5K', desc: 'Recorrido urbano · 5 km', cat: 'Mayores' },
    { id: '10k', name: '10K', label: '10K', desc: 'Reto medio · 10 km', cat: 'Mayores' },
    { id: '15k', name: '15K', label: '15K', desc: 'Ruta larga · 15 km', cat: 'Máster A' },
    { id: 'pet', name: '5K Pet', label: '5K Pet Race', desc: 'Con tu mascota · 5 km', cat: 'Pet Race' },
    { id: 'elite', name: 'Élite', label: 'Élite', desc: 'Atletas federados', cat: 'Élite' },
  ];
  if (age >= 40 && age <= 49)  return [
    { id: '5k', name: '5K', label: '5K', desc: 'Recorrido urbano · 5 km', cat: 'Abierta' },
    { id: '10k', name: '10K', label: '10K', desc: 'Reto medio · 10 km', cat: 'Máster' },
    { id: '15k', name: '15K', label: '15K', desc: 'Ruta larga · 15 km', cat: 'Máster A' },
    { id: 'pet', name: '5K Pet', label: '5K Pet Race', desc: 'Con tu mascota · 5 km', cat: 'Pet Race' },
    { id: 'elite', name: 'Élite', label: 'Élite', desc: 'Atletas federados', cat: 'Élite' },
  ];
  // 50+
  return [
    { id: '5k', name: '5K', label: '5K', desc: 'Recorrido urbano · 5 km', cat: 'Abierta' },
    { id: '10k', name: '10K', label: '10K', desc: 'Reto medio · 10 km', cat: 'Máster' },
    { id: '15k', name: '15K', label: '15K', desc: 'Ruta larga · 15 km', cat: 'Máster B' },
    { id: 'pet', name: '5K Pet', label: '5K Pet Race', desc: 'Con tu mascota · 5 km', cat: 'Pet Race' },
    { id: 'elite', name: 'Élite', label: 'Élite', desc: 'Atletas federados', cat: 'Élite' },
  ];
}

function isKidsRace(distId) {
  return ['babys', 'preinfantil', 'infantil', 'teens'].includes(distId);
}

// Compute price; returns { price, label } or { price: null, label: '...' } if not enough info
function calcularValor({ age, distId, hasVinculo, tipoVinculo }) {
  if (!age || !distId) return { price: null, label: 'Selecciona distancia para ver el valor' };

  // Kids (6-13)
  if (isKidsRace(distId)) {
    if (hasVinculo && (tipoVinculo === 'estudiante' || tipoVinculo === 'hijo_colaborador')) {
      return { price: 75000, label: 'Tarifa GBCMC Kids' };
    }
    return { price: 110000, label: 'Tarifa pública Kids' };
  }

  // Adults (14+)
  if (!hasVinculo) {
    return { price: 145000, label: 'Tarifa pública' };
  }
  if (tipoVinculo === 'padre' || tipoVinculo === 'aliado') {
    return { price: 120000, label: 'Tarifa familia / aliados' };
  }
  if (tipoVinculo === 'estudiante') {
    if (distId === '5k' || distId === '10k') return { price: 90000, label: 'Estudiante GBCMC' };
    // Beneficio estudiante aplica solo a 5K y 10K
    return { price: 145000, label: 'Tarifa pública · beneficio estudiante aplica solo en 5K y 10K' };
  }
  if (tipoVinculo === 'egresado' || tipoVinculo === 'docente') {
    return { price: 90000, label: 'Comunidad GBCMC' };
  }
  return { price: 145000, label: 'Tarifa pública' };
}

function fmtCOP(n) {
  if (n == null) return '—';
  return '$' + n.toLocaleString('es-CO');
}

const TIPOS_VINCULO = [
  { id: 'estudiante', label: 'Estudiante GBCMC' },
  { id: 'egresado', label: 'Egresado GBCMC' },
  { id: 'padre', label: 'Padre / madre / acudiente' },
  { id: 'docente', label: 'Docente · Admin · Directivo · Colaborador' },
  { id: 'hijo_colaborador', label: 'Hijo/a de colaborador GBCMC' },
  { id: 'aliado', label: 'Aliado con convenio' },
];

const EPS_LIST = [
  'Sura', 'Sanitas', 'Compensar', 'Famisanar', 'Nueva EPS',
  'Salud Total', 'Aliansalud', 'Coomeva', 'Mutual SER', 'Otra'
];

const STEPS = [
  { id: 1, short: 'Documento', long: 'Identificación' },
  { id: 2, short: 'Datos',     long: 'Datos personales' },
  { id: 3, short: 'Salud',     long: 'Salud y emergencia' },
  { id: 4, short: 'Carrera',   long: 'Categoría y distancia' },
  { id: 5, short: 'Vínculo',   long: 'Vínculo GBCMC' },
  { id: 6, short: 'Pago',      long: 'Resumen y pago' },
];

Object.assign(window, {
  getDistancesForAge, isKidsRace, calcularValor, fmtCOP,
  TIPOS_VINCULO, EPS_LIST, STEPS
});
