// Calorie Burn — running MET tables × body weight × hours.
// MET values from Compendium of Physical Activities (2011, codes 12030–12150).

window.TOOL_HANDLERS['calorie-burn'] = function CalorieBurnTool() {
  const S = window.MMSports;
  const [unit, setUnit] = React.useState('km');
  const [weight, setWeight] = React.useState(70);
  const [weightUnit, setWeightUnit] = React.useState('kg');
  const [distance, setDistance] = React.useState('10');
  const [pace, setPace] = React.useState('5:30');

  // Map pace (sec/km) → MET. Compendium-based, smoothed.
  function paceToMET(secPerKm) {
    const minPerKm = secPerKm / 60;
    if (minPerKm > 8.0) return 6.0;        // 4 mph easy walk-jog
    if (minPerKm > 7.0) return 7.0;        // 5 mph
    if (minPerKm > 6.5) return 8.3;
    if (minPerKm > 5.6) return 9.8;        // 6 mph
    if (minPerKm > 5.0) return 11.0;       // 6.7 mph
    if (minPerKm > 4.4) return 11.8;       // 7.5 mph
    if (minPerKm > 4.0) return 12.8;       // 8.6 mph
    if (minPerKm > 3.7) return 14.5;
    if (minPerKm > 3.4) return 16.0;       // 9.6 mph
    if (minPerKm > 3.1) return 19.0;       // 10.9 mph
    return 23.0;                            // elite 13+ mph
  }

  const result = React.useMemo(() => {
    const d = Number(distance);
    const pSec = S.parseTimeToSeconds(pace);
    const wKg = weightUnit === 'lb' ? weight * 0.453592 : weight;
    if (!d || !pSec || !wKg) return null;
    const distKm = unit === 'mi' ? d * 1.609344 : d;
    const paceSecKm = unit === 'mi' ? S.paceMileToKm(pSec) : pSec;
    const totalSec = distKm * paceSecKm;
    const hours = totalSec / 3600;
    const met = paceToMET(paceSecKm);
    const kcal = met * wKg * hours;
    return {
      kcal: Math.round(kcal),
      met,
      hours,
      perKm: kcal / distKm,
      durationStr: S.formatHMS(totalSec, { alwaysHours: true }),
    };
  }, [unit, distance, pace, weight, weightUnit]);

  return (
    <div className="mini-tool sport-tool">
      <S.SportsToolHeader title="Calorie Burn" sub="MET-based estimate from distance, weight and running pace." icon="bolt" accent="#f97316" />

      <div className="sport-mode-row">
        <div className="sport-mode-spacer" />
        <S.UnitToggle unit={unit} setUnit={setUnit} />
      </div>

      <div className="sport-input-grid">
        <div className="mini-field">
          <label className="mini-label">Weight</label>
          <div style={{ display: 'flex', gap: 8 }}>
            <input type="number" min="20" max="250" className="mini-input"
                   value={weight} onChange={(e) => setWeight(Number(e.target.value) || 0)} />
            <select className="mini-input" style={{ width: 90 }}
                    value={weightUnit} onChange={(e) => setWeightUnit(e.target.value)}>
              <option value="kg">kg</option>
              <option value="lb">lb</option>
            </select>
          </div>
        </div>
        <div className="mini-field">
          <label className="mini-label">Distance ({unit})</label>
          <input type="number" min="0" step="0.1" className="mini-input"
                 value={distance} onChange={(e) => setDistance(e.target.value)} />
        </div>
        <div className="mini-field">
          <label className="mini-label">Pace (mm:ss / {unit})</label>
          <input type="text" className="mini-input"
                 value={pace} onChange={(e) => setPace(e.target.value)} placeholder="5:30" />
        </div>
      </div>

      <div className="sport-results">
        {result ? (
          <>
            <S.ResultTile label="Calories burned" value={`${result.kcal.toLocaleString()} kcal`} sub={`MET ${result.met.toFixed(1)} · ${result.durationStr}`} accent="#f97316" />
            <S.ResultTile label={`Calories per ${unit}`} value={`${Math.round(result.perKm)} kcal`} />
            <S.ResultTile label="Equivalent" value={`${(result.kcal / 250).toFixed(1)} bananas`} sub="~250 kcal each" />
          </>
        ) : <div className="sport-empty">Enter weight, distance and pace.</div>}
      </div>

      <div className="sport-helper">
        Estimates use the Compendium of Physical Activities MET tables. Real burn varies ±10 % with terrain, wind, fitness level and individual metabolism.
      </div>
    </div>
  );
};
