/* global React, ReactDOM, Sidebar, TopBar, FilterBar, EventCard, NF_EVENTS, TweaksPanel, useTweaks, TweakSection, TweakRadio, TweakToggle */

const { useState, useMemo } = React;

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "theme": "dark",
  "density": "cozy",
  "cardStyle": "hairline",
  "showFlavor": true
}/*EDITMODE-END*/;

function App() {
  const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [filter, setFilter] = useState("all");

  // Apply theme/density/style to <html> so tokens cascade everywhere.
  React.useEffect(() => {
    document.documentElement.setAttribute("data-theme", t.theme);
    document.documentElement.setAttribute("data-density", t.density);
    document.documentElement.setAttribute("data-card-style", t.cardStyle);
  }, [t.theme, t.density, t.cardStyle]);

  const counts = useMemo(() => {
    const c = { all: NF_EVENTS.length, news: 0, job_listing: 0, career_change: 0 };
    for (const e of NF_EVENTS) c[e.type]++;
    return c;
  }, []);

  const events = useMemo(() => {
    if (filter === "all") return NF_EVENTS;
    return NF_EVENTS.filter(e => e.type === filter);
  }, [filter]);

  return (
    <div className="app">
      <Sidebar />
      <main className="main">
        <TopBar theme={t.theme} onTheme={(v) => setTweak("theme", v)} />
        <div className="feed-col">
          <FilterBar counts={counts} active={filter} onFilter={setFilter} />
          {events.length === 0 ? (
            <div className="empty">
              <p>No events match.</p>
            </div>
          ) : (
            <div className="cards">
              {events.map(e => (
                <EventCard key={e.id} event={e} tweaks={t} />
              ))}
            </div>
          )}
          <div className="end">— You're caught up —</div>
        </div>
      </main>

      <TweaksPanel title="Tweaks">
        <TweakSection label="Theme">
          <TweakRadio
            label="Mode"
            value={t.theme}
            onChange={(v) => setTweak("theme", v)}
            options={[{ value: "dark", label: "Dark" }, { value: "light", label: "Light" }]}
          />
        </TweakSection>

        <TweakSection label="Layout">
          <TweakRadio
            label="Density"
            value={t.density}
            onChange={(v) => setTweak("density", v)}
            options={[
              { value: "compact", label: "Compact" },
              { value: "cozy", label: "Cozy" },
              { value: "comfortable", label: "Roomy" },
            ]}
          />
          <TweakRadio
            label="Card style"
            value={t.cardStyle}
            onChange={(v) => setTweak("cardStyle", v)}
            options={[
              { value: "hairline", label: "Hairline" },
              { value: "rail", label: "Left rail" },
              { value: "topbar", label: "Top bar" },
            ]}
          />
        </TweakSection>

        <TweakSection label="Content">
          <TweakToggle
            label="Show news flavor"
            value={t.showFlavor}
            onChange={(v) => setTweak("showFlavor", v)}
          />
        </TweakSection>
      </TweaksPanel>
    </div>
  );
}

ReactDOM.createRoot(document.getElementById("root")).render(<App />);
