/**
 * Fonctions pures de scoring — extraites de SpotPanel pour être testables
 * indépendamment du rendu React.
 */

export const ETA_BUFFER_KM = 5;

/**
 * Libellé dominant de l'indice de risque.
 * @param {number} value   Score brut 0-100
 * @param {string} level   'low' | 'medium' | 'high'
 * @param {number|null} distance  Distance km au patch le plus proche
 */
export function scoreLabel(value, level, distance) {
  if (level === 'high')                                        return 'Impact';
  if (level === 'medium')                                      return 'Risque';
  if (value >= 15 && distance != null && distance < 100)      return 'Veille';
  return 'OK';
}

/**
 * Calcule l'horizon (h) auquel un impact est prévu.
 * Retourne 0 si impact en cours, null si aucun prévu dans 48h.
 * @param {{ distance?: number|null }|null} score
 * @param {Record<string, { distanceKm?: number|null }>|null} horizons
 */
export function computeEta(score, horizons) {
  if (score?.distance != null && score.distance < ETA_BUFFER_KM) return 0;
  for (const h of [6, 12, 24, 48]) {
    const horizon = horizons?.[`h${h}`];
    if (horizon?.distanceKm != null && horizon.distanceKm < ETA_BUFFER_KM) return h;
  }
  return null;
}

/**
 * Retourne l'objet label/icône/classe CSS pour l'affichage ETA.
 * @param {number|null} etaHours
 * @param {number|null|undefined} score
 * @param {number|null|undefined} distance
 */
export function etaLabel(etaHours, score, distance) {
  if (etaHours === 0)  return { icon: '🚨', label: 'Impact en cours',           cls: 'eta--now'   };
  if (etaHours === 6)  return { icon: '⚠️',  label: 'Impact prévu dans ~6h',     cls: 'eta--soon'  };
  if (etaHours === 12) return { icon: '⚠️',  label: 'Impact prévu dans ~12h',    cls: 'eta--soon'  };
  if (etaHours === 24) return { icon: '🕐',  label: 'Impact prévu dans ~24h',    cls: 'eta--later' };
  if (etaHours === 48) return { icon: '🕐',  label: 'Impact prévu dans ~48h',    cls: 'eta--later' };
  if ((score ?? 0) >= 15 && distance != null && distance < 100)
    return             { icon: '👁',  label: 'Sargasses en surveillance',        cls: 'eta--watch' };
  return               { icon: '✅',  label: 'Aucun impact prévu (48h)',          cls: 'eta--safe'  };
}
