const DROP_THRESHOLD = 0.4;

export type LoadSample = { ppm: number };

/**
 * R-B5: if latest load is >40% below rolling average of prior loads, flag dilution.
 * `priorLoads` = last N loads excluding the candidate (oldest first).
 */
export function detectDilution(priorLoads: LoadSample[], candidatePpm: number): boolean {
  if (priorLoads.length === 0) return false;
  const avg = priorLoads.reduce((s, l) => s + l.ppm, 0) / priorLoads.length;
  if (avg <= 0) return false;
  const drop = (avg - candidatePpm) / avg;
  return drop > DROP_THRESHOLD;
}

export function rollingAverage(ppms: number[]): number {
  if (ppms.length === 0) return 0;
  return ppms.reduce((a, b) => a + b, 0) / ppms.length;
}
