// VO2max Estimator — Cooper 12-min run test or Daniels VDOT from a race time.

window.TOOL_HANDLERS['vo2max-estimator'] = function Vo2maxTool() {
  const S = window.MMSports;
  const [method, setMethod] = React.useState('cooper'); // 'cooper' | 'daniels'
  const [cooperDist, setCooperDist] = React.useState('2400'); // meters in 12 min
  const [racePace, setRacePace] = React.useState('5:00'); // seconds per km
  const [raceUnit, setRaceUnit] = React.useState('km');

  // Cooper: VO2max = (D in m - 504.9) / 44.73
  const cooperVo2 = React.useMemo(() => {
    const d = Number(cooperDist);
    if (!d) return null;
    return (d - 504.9) / 44.73;
  }, [cooperDist]);

  // Daniels: VDOT estimate from race velocity (m/min).
  // Approximation by Mercier/Léger: VO2 = -4.6 + 0.182258 × v + 0.000104 × v²
  // % VO2max held during a race (~80% for marathon, 95% for 3 K).
  const danielsVo2 = React.useMemo(() => {
    const paceSec = S.parseTimeToSeconds(racePace);
    if (!paceSec) return null;
    const paceSecKm = raceUnit === 'mi' ? S.paceMileToKm(paceSec) : paceSec;
    const v = 1000 / (paceSecKm / 60); // metres per minute
    const vo2 = -4.6 + 0.182258 * v + 0.000104 * v * v;
    // assume 90% utilization for a 5–10 K race
    return vo2 / 0.9;
  }, [racePace, raceUnit]);

  const value = method === 'cooper' ? cooperVo2 : danielsVo2;
  const category = (v) => {
    if (v == null) return '';
    if (v < 30) return 'Low';
    if (v < 40) return 'Below average';
    if (v < 47) return 'Average';
    if (v < 55) return 'Good';
    if (v < 65) return 'Excellent';
    return 'Elite';
  };
  const accent = (v) => {
    if (v == null) return '#16a34a';
    if (v < 30) return '#c8321f';
    if (v < 40) return '#b8700a';
    if (v < 47) return '#16a34a';
    if (v < 55) return '#0e9488';
    if (v < 65) return '#2563eb';
    return '#7c3aed';
  };

  return (
    <div className="mini-tool sport-tool">
      <S.SportsToolHeader title="VO₂max Estimator" sub="Cooper 12-minute test or race-based aerobic capacity." icon="gauge" />

      <div className="sport-mode-row">
        <button type="button" className={`sport-mode-btn ${method === 'cooper' ? 'active' : ''}`} onClick={() => setMethod('cooper')}>Cooper test</button>
        <button type="button" className={`sport-mode-btn ${method === 'daniels' ? 'active' : ''}`} onClick={() => setMethod('daniels')}>From race pace</button>
      </div>

      {method === 'cooper' ? (
        <div className="sport-input-grid">
          <div className="mini-field">
            <label className="mini-label">Distance covered in 12 min (m)</label>
            <input type="number" min="500" max="5000" step="50" className="mini-input"
                   value={cooperDist} onChange={(e) => setCooperDist(e.target.value)} />
          </div>
        </div>
      ) : (
        <div className="sport-input-grid">
          <div className="mini-field">
            <label className="mini-label">Race pace (mm:ss / {raceUnit})</label>
            <input type="text" className="mini-input"
                   value={racePace} onChange={(e) => setRacePace(e.target.value)} placeholder="4:30" />
          </div>
          <div className="mini-field">
            <label className="mini-label">Unit</label>
            <select className="mini-input" value={raceUnit} onChange={(e) => setRaceUnit(e.target.value)}>
              <option value="km">per km</option>
              <option value="mi">per mile</option>
            </select>
          </div>
        </div>
      )}

      <div className="sport-results">
        <S.ResultTile
          label="Estimated VO₂max"
          value={value ? `${value.toFixed(1)}` : '—'}
          sub={value ? `mL · kg⁻¹ · min⁻¹ · ${category(value)}` : 'enter values above'}
          accent={accent(value)} />
        {value && (
          <S.ResultTile
            label="Easy run pace ~"
            value={S.formatPace(60 / (value * 0.7 / 3.5)) /* rough heuristic */}
            sub={'mm:ss / km — 70 % effort'} />
        )}
      </div>

      <div className="sport-helper">
        VO₂max is the body's peak oxygen uptake — the single best predictor of endurance performance. The Cooper test measures the distance you can cover in 12 minutes at maximum effort.
      </div>
    </div>
  );
};
