// tweaks.jsx — Tweaks UI for Pahala Kencana deck.
// Reads TWEAK_DEFAULTS from window (set inline in index.html for EDITMODE persist).

const { useEffect } = React;

function PKTweaks() {
  const [t, setTweak] = useTweaks(window.TWEAK_DEFAULTS);

  // Apply mode + accent live by writing CSS variables on <html>
  useEffect(() => {
    const root = document.documentElement;
    root.setAttribute('data-mode', t.mode);
    root.style.setProperty('--accent', t.accent);
    // Update accent-soft (12% alpha)
    const hex = t.accent.replace('#', '');
    const r = parseInt(hex.slice(0,2), 16);
    const g = parseInt(hex.slice(2,4), 16);
    const b = parseInt(hex.slice(4,6), 16);
    root.style.setProperty('--accent-soft', `rgba(${r},${g},${b},0.14)`);
  }, [t.mode, t.accent]);

  // Apply scenario numbers to DOM
  useEffect(() => {
    ['A','B','C','D'].forEach((k) => {
      const inv = t[`s${k}_invest`];
      const bus = t[`s${k}_bus`];
      const rev = t[`s${k}_rev`];
      const margin = t[`s${k}_margin`];
      document.querySelectorAll(`[data-scen="${k}"] [data-field="invest"]`).forEach(el => el.textContent = inv);
      document.querySelectorAll(`[data-scen="${k}"] [data-field="bus"]`).forEach(el => el.textContent = `+ ${bus} bus`);
      document.querySelectorAll(`[data-scen="${k}"] [data-field="rev"]`).forEach(el => el.textContent = `Rp ${rev} M`);
      document.querySelectorAll(`[data-scen="${k}"] [data-field="margin"]`).forEach(el => el.textContent = `Rp ${margin} M`);
    });
  }, [t.sA_invest, t.sA_bus, t.sA_rev, t.sA_margin,
      t.sB_invest, t.sB_bus, t.sB_rev, t.sB_margin,
      t.sC_invest, t.sC_bus, t.sC_rev, t.sC_margin,
      t.sD_invest, t.sD_bus, t.sD_rev, t.sD_margin]);

  return (
    <TweaksPanel title="Tweaks">
      <TweakSection label="Tampilan / Appearance" />
      <TweakRadio
        label="Mode"
        value={t.mode}
        options={[{label:'Dark', value:'dark'},{label:'Light', value:'light'}]}
        onChange={(v) => setTweak('mode', v)}
      />
      <TweakColor
        label="Accent / Warna aksen"
        value={t.accent}
        options={['#ec4f3f', '#d4a017', '#3b82f6', '#10b981', '#a855f7']}
        onChange={(v) => setTweak('accent', v)}
      />

      <TweakSection label="Skenario A — Recovery" />
      <TweakSlider label="Investasi (Rp M)" value={t.sA_invest} min={20} max={80} step={5} unit=" M"
                   onChange={(v) => setTweak('sA_invest', v)} />
      <TweakSlider label="Bus baru" value={t.sA_bus} min={5} max={25} step={1}
                   onChange={(v) => setTweak('sA_bus', v)} />
      <TweakSlider label="Net Rev (Rp M)" value={t.sA_rev} min={30} max={100} step={2}
                   onChange={(v) => setTweak('sA_rev', v)} />
      <TweakSlider label="Margin (Rp M)" value={t.sA_margin} min={10} max={50} step={1}
                   onChange={(v) => setTweak('sA_margin', v)} />

      <TweakSection label="Skenario B — Ekspansi" />
      <TweakSlider label="Investasi (Rp M)" value={t.sB_invest} min={60} max={150} step={5} unit=" M"
                   onChange={(v) => setTweak('sB_invest', v)} />
      <TweakSlider label="Bus baru" value={t.sB_bus} min={15} max={50} step={1}
                   onChange={(v) => setTweak('sB_bus', v)} />
      <TweakSlider label="Net Rev (Rp M)" value={t.sB_rev} min={50} max={140} step={2}
                   onChange={(v) => setTweak('sB_rev', v)} />
      <TweakSlider label="Margin (Rp M)" value={t.sB_margin} min={15} max={60} step={1}
                   onChange={(v) => setTweak('sB_margin', v)} />

      <TweakSection label="Skenario C — Akselerasi" />
      <TweakSlider label="Investasi (Rp M)" value={t.sC_invest} min={120} max={250} step={10} unit=" M"
                   onChange={(v) => setTweak('sC_invest', v)} />
      <TweakSlider label="Bus baru" value={t.sC_bus} min={40} max={100} step={2}
                   onChange={(v) => setTweak('sC_bus', v)} />
      <TweakSlider label="Net Rev (Rp M)" value={t.sC_rev} min={80} max={180} step={2}
                   onChange={(v) => setTweak('sC_rev', v)} />
      <TweakSlider label="Margin (Rp M)" value={t.sC_margin} min={25} max={80} step={1}
                   onChange={(v) => setTweak('sC_margin', v)} />

      <TweakSection label="Skenario D — Mega Comeback" />
      <TweakSlider label="Investasi (Rp M)" value={t.sD_invest} min={250} max={500} step={10} unit=" M"
                   onChange={(v) => setTweak('sD_invest', v)} />
      <TweakSlider label="Bus baru" value={t.sD_bus} min={80} max={200} step={2}
                   onChange={(v) => setTweak('sD_bus', v)} />
      <TweakSlider label="Net Rev (Rp M)" value={t.sD_rev} min={120} max={260} step={2}
                   onChange={(v) => setTweak('sD_rev', v)} />
      <TweakSlider label="Margin (Rp M)" value={t.sD_margin} min={40} max={120} step={1}
                   onChange={(v) => setTweak('sD_margin', v)} />
    </TweaksPanel>
  );
}

// Mount
const mount = document.getElementById('tweaks-mount');
ReactDOM.createRoot(mount).render(<PKTweaks />);
