/** @param {Date} d */
function toIsoDateLocal(d) {
  const y = d.getFullYear();
  const m = String(d.getMonth() + 1).padStart(2, '0');
  const day = String(d.getDate()).padStart(2, '0');
  return `${y}-${m}-${day}`;
}

/**
 * Fecha máxima de nacimiento (YYYY-MM-DD) para cumplir edad mínima `anios` a la fecha de referencia.
 *
 * @param {number} anios
 * @param {Date} [referencia=new Date()]
 * @returns {string}
 */
export function isoMaxFechaNacimientoParaEdadMinima(anios, referencia = new Date()) {
  const d = new Date(referencia.getFullYear(), referencia.getMonth(), referencia.getDate());
  d.setFullYear(d.getFullYear() - anios);
  return toIsoDateLocal(d);
}

/**
 * @param {number} aniosMaximos
 * @param {Date} [referencia=new Date()]
 * @returns {string}
 */
export function isoMinFechaNacimientoParaEdadMaxima(aniosMaximos, referencia = new Date()) {
  const d = new Date(referencia.getFullYear(), referencia.getMonth(), referencia.getDate());
  d.setFullYear(d.getFullYear() - aniosMaximos);
  return toIsoDateLocal(d);
}

/**
 * @param {string} fechaIso — YYYY-MM-DD
 * @param {number} edadMinima
 * @param {Date} [referencia=new Date()]
 * @returns {boolean}
 */
export function cumpleEdadMinima(fechaIso, edadMinima, referencia = new Date()) {
  if (!fechaIso || typeof fechaIso !== 'string') return false;
  const maxOk = isoMaxFechaNacimientoParaEdadMinima(edadMinima, referencia);
  return fechaIso <= maxOk;
}
