/** Imperial BMI: 703 * lb / inches^2 */
export function parseHeightToInches(heightFtIn: string): number | null {
  const compact = heightFtIn.trim().toLowerCase().replace(/['"]/g, " ");
  const m = compact.match(/(\d+)\s*(?:ft|feet)?\s*(\d+)?/);
  if (!m) {
    const n = Number(heightFtIn);
    return Number.isFinite(n) && n > 40 && n < 90 ? n : null;
  }
  const ft = Number(m[1]);
  const inches = Number(m[2] || 0);
  return ft * 12 + inches;
}

export function computeBmi(heightFtIn?: string, weightLb?: number): number | undefined {
  if (!heightFtIn || weightLb == null) return undefined;
  const inches = parseHeightToInches(heightFtIn);
  if (!inches) return undefined;
  return Number(((703 * weightLb) / (inches * inches)).toFixed(1));
}

export function buildClassFromBmi(bmi?: number): string | undefined {
  if (bmi == null) return undefined;
  if (bmi < 18.5) return "underweight_postpone";
  if (bmi <= 38) return "si_level";
  if (bmi <= 42) return "si_level";
  if (bmi <= 46) return "graded";
  return "gi_or_decline";
}
