// ─── APP SHELL ────────────────────────────────────────────
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "theme": "dark",
  "mood": "clean",
  "accent": "#e8a23a",
  "density": "comfortable",
  "radius": "default",
  "sidebar": "left"
}/*EDITMODE-END*/;

// Convert accent hex → readable foreground (dark on light accents, light on dark accents)
const accentFgFor = (hex) => {
  if (!hex || hex[0] !== "#") return "#1a140a";
  const r = parseInt(hex.slice(1, 3), 16);
  const g = parseInt(hex.slice(3, 5), 16);
  const b = parseInt(hex.slice(5, 7), 16);
  const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
  return lum > 0.6 ? "#1a140a" : "#fdfaf3";
};
const hexToRgba = (hex, a) => {
  const r = parseInt(hex.slice(1, 3), 16);
  const g = parseInt(hex.slice(3, 5), 16);
  const b = parseInt(hex.slice(5, 7), 16);
  return `rgba(${r},${g},${b},${a})`;
};

const App = () => {
  const [tweaks, setTweaksRaw] = useTweaks(TWEAK_DEFAULTS);
  const [screen, setScreen] = React.useState("dashboard");
  const [entryId, setEntryId] = React.useState(null);

  // Apply tweaks to <html> root
  React.useEffect(() => {
    const root = document.documentElement;
    root.dataset.theme = tweaks.theme;
    root.dataset.mood = tweaks.mood;
    root.dataset.density = tweaks.density;
    root.dataset.radius = tweaks.radius;
    root.dataset.sidebar = tweaks.sidebar;
    root.style.setProperty("--accent", tweaks.accent);
    root.style.setProperty("--accent-fg", accentFgFor(tweaks.accent));
    root.style.setProperty("--accent-soft", hexToRgba(tweaks.accent, 0.14));
    root.style.setProperty("--accent-line", hexToRgba(tweaks.accent, 0.32));
  }, [tweaks]);

  const setTweak = (k, v) => {
    if (typeof k === "object") setTweaksRaw(k);
    else setTweaksRaw({ [k]: v });
  };

  const goto = (s, opts = {}) => {
    setScreen(s);
    if (opts.entryId !== undefined) setEntryId(opts.entryId);
    else if (s !== "wiki") setEntryId(null);
  };

  const navItems = [
    { id: "dashboard", label: "Dashboard", icon: "home" },
    { id: "wiki",      label: "Wiki / Codex",  icon: "book",   count: window.WIKI.length },
    { id: "kanban",    label: "Kanban",    icon: "kanban" },
    { id: "tasks",     label: "Tasks",     icon: "list",   count: window.TASKS.filter(t => t.col !== "done").length },
    { id: "ideas",     label: "Idea Wall", icon: "lightbulb" },
  ];

  // crumb name
  const crumb = (() => {
    if (screen === "wiki" && entryId) {
      const e = window.WIKI.find(w => w.id === entryId);
      return ["Wiki", e ? e.title : entryId];
    }
    const nav = navItems.find(n => n.id === screen);
    if (nav) return [nav.label];
    if (screen === "settings") return ["Settings"];
    return ["—"];
  })();

  return (
    <React.Fragment>
      <div className="app">
        <aside className="sidebar">
          <div className="brand">
            <div className="brand-mark"><Icon name="ghost" size={16}/></div>
            <div>
              <div className="brand-name">Fried Yams Studios</div>
              <div className="brand-sub mono">HUSK · internal CRM</div>
            </div>
          </div>

          <div className="nav-section">
            <div className="nav-label">Workspace</div>
            {navItems.map(n => (
              <button
                key={n.id}
                className={`nav-item ${screen === n.id ? "is-active" : ""}`}
                onClick={() => goto(n.id)}
              >
                <span className="nav-icon"><Icon name={n.icon} size={14}/></span>
                <span>{n.label}</span>
                {n.count !== undefined && <span className="nav-count">{n.count}</span>}
              </button>
            ))}
          </div>

          <div className="nav-section">
            <div className="nav-label">
              <span>Pinned</span>
              <button className="icon-btn" style={{ width: 18, height: 18 }}><Icon name="plus" size={11}/></button>
            </div>
            <button className="nav-item" onClick={() => goto("wiki", { entryId: "SYS-014" })}>
              <span className="nav-icon"><Icon name="eye" size={14}/></span>
              <span>Sanity & Lucidity</span>
            </button>
            <button className="nav-item" onClick={() => goto("wiki", { entryId: "SYS-031" })}>
              <span className="nav-icon"><Icon name="scarecrow" size={14}/></span>
              <span>Husk Awareness</span>
            </button>
            <button className="nav-item" onClick={() => goto("ideas")}>
              <span className="nav-icon"><Icon name="lightbulb" size={14}/></span>
              <span>Reference wall</span>
            </button>
          </div>

          <div className="nav-section">
            <div className="nav-label">Team</div>
            {window.TEAM.map(m => (
              <button key={m.id} className="nav-item">
                <Avatar id={m.id} size={20}/>
                <span style={{ marginLeft: 2 }}>{m.name}</span>
                <span className="nav-count">
                  {window.TASKS.filter(t => t.assignees.includes(m.id) && t.col !== "done").length}
                </span>
              </button>
            ))}
          </div>

          <div className="sidebar-footer">
            <Avatar id="ka" size={26}/>
            <div style={{ flex: 1, minWidth: 0 }}>
              <div style={{ fontSize: 12, fontWeight: 500, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>Kade Aronson</div>
              <div className="muted" style={{ fontSize: 10.5 }}>Director</div>
            </div>
            <button className="icon-btn" onClick={() => goto("settings")}><Icon name="settings" size={14}/></button>
          </div>
        </aside>

        <main className="main">
          <header className="topbar">
            <div className="crumbs">
              {crumb.map((c, i) => (
                <React.Fragment key={i}>
                  {i > 0 && <span className="sep"><Icon name="chevron-r" size={11}/></span>}
                  <span className={i === crumb.length - 1 ? "now" : ""}>{c}</span>
                </React.Fragment>
              ))}
            </div>

            <div className="right">
              <div className="search">
                <Icon name="search" size={13}/>
                <span>Search wiki, tasks, ideas…</span>
                <div className="spacer"/>
                <span className="kbd">⌘K</span>
              </div>
              <button
                className="icon-btn"
                onClick={() => setTweak("theme", tweaks.theme === "dark" ? "light" : "dark")}
                title="Toggle theme"
              >
                <Icon name={tweaks.theme === "dark" ? "sun" : "moon"} size={14}/>
              </button>
              <button className="icon-btn" title="Notifications">
                <Icon name="bell" size={14}/>
                <span style={{
                  position: "absolute", top: 6, right: 6,
                  width: 6, height: 6, borderRadius: "50%",
                  background: "var(--accent)",
                }}/>
              </button>
              <button className="icon-btn" onClick={() => goto("settings")} title="Settings">
                <Icon name="settings" size={14}/>
              </button>
            </div>
          </header>

          <div className="content">
            {screen === "dashboard" && <DashboardScreen goto={goto}/>}
            {screen === "wiki"      && <WikiScreen entryId={entryId} setEntryId={setEntryId}/>}
            {screen === "kanban"    && <KanbanScreen/>}
            {screen === "tasks"     && <TasksScreen/>}
            {screen === "ideas"     && <IdeasScreen/>}
            {screen === "settings"  && <SettingsScreen tweaks={tweaks} setTweak={setTweak}/>}
          </div>
        </main>
      </div>

      {/* Atmospheric overlays */}
      <div className="grain"/>
      <div className="vignette"/>

      {/* Tweaks panel — manages its own open state via host protocol */}
      <TweaksPanel title="Tweaks">
        <TweakSection label="Theme">
          <TweakRadio label="Mode" value={tweaks.theme} onChange={v => setTweak("theme", v)} options={[
            { value: "dark", label: "Dark" },
            { value: "light", label: "Light" },
          ]}/>
          <TweakRadio label="Atmosphere" value={tweaks.mood} onChange={v => setTweak("mood", v)} options={[
            { value: "clean", label: "Clean" },
            { value: "atmospheric", label: "Atmos." },
          ]}/>
          <TweakColor
            label="Accent"
            value={tweaks.accent}
            onChange={v => setTweak("accent", v)}
            options={["#e8a23a", "#c8312b", "#4f8cff", "#7c5cff", "#2cb67d", "#e8e3d8"]}
          />
        </TweakSection>
        <TweakSection label="Layout">
          <TweakRadio label="Density" value={tweaks.density} onChange={v => setTweak("density", v)} options={[
            { value: "comfortable", label: "Comfort" },
            { value: "compact", label: "Compact" },
          ]}/>
          <TweakSelect label="Corners" value={tweaks.radius} onChange={v => setTweak("radius", v)} options={[
            { value: "sharp", label: "Sharp" },
            { value: "default", label: "Default" },
            { value: "soft", label: "Soft" },
          ]}/>
          <TweakRadio label="Sidebar" value={tweaks.sidebar} onChange={v => setTweak("sidebar", v)} options={[
            { value: "left", label: "Left" },
            { value: "right", label: "Right" },
          ]}/>
        </TweakSection>
      </TweaksPanel>
    </React.Fragment>
  );
};

window.App = App;

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