/* eslint-disable */
// ============================================================
// APP SHELL — Sidebar + TopBar + floating PersonaSwitcher
// ============================================================

const { useState: useSh_S, useEffect: useSh_E, useRef: useSh_R } = React;

// ---------- Sidebar ----------
const Sidebar = ({ menu, persona, role, currentActionId, onNavigate, collapsed, setCollapsed, onOpenSettings }) => {
  // Group menu items by section
  const sections = [];
  (menu || []).forEach((it) => {
    if (!it.visible) return;
    const key = it.section || "";
    let s = sections.find((x) => x.label === key);
    if (!s) { s = { label: key, items: [] }; sections.push(s); }
    s.items.push(it);
  });

  return (
    <aside
      className={`flex flex-col shrink-0 transition-[width] duration-200 ${collapsed ? "w-[68px]" : "w-[240px]"}`}
      style={{ background: "var(--sidebar-bg, #0f1218)", color: "var(--sidebar-text, #d6d1c4)", borderRight: "1px solid var(--sidebar-border, rgba(255,255,255,0.05))" }}
    >
      {/* Brand */}
      <div className="h-14 flex items-center gap-2.5 px-3.5" style={{ borderBottom: "1px solid var(--sidebar-border, rgba(255,255,255,0.05))" }}>
        <div className="h-9 w-9 inline-flex items-center justify-center rounded-md text-white shrink-0" style={{ background: "var(--primary)", boxShadow: "0 4px 12px -4px rgba(0,0,0,0.5)" }}>
          <Icon name="diamond" size={15} />
        </div>
        {!collapsed && (
          <div className="leading-tight min-w-0 flex-1">
            <div className="text-[15px] font-semibold text-white wordmark">Green House</div>
            <div className="text-[10.5px]" style={{ color: "var(--sidebar-muted, #9095a3)" }}>action-driven UI</div>
          </div>
        )}
        <button
          onClick={() => setCollapsed(!collapsed)}
          className="h-7 w-7 inline-flex items-center justify-center rounded hover:bg-white/5"
          style={{ color: "var(--sidebar-muted, #9095a3)" }}
          title={collapsed ? "Expand sidebar" : "Collapse sidebar"}
        >
          <Icon name={collapsed ? "chevronRight" : "chevronLeft"} size={14} />
        </button>
      </div>

      <nav className="flex-1 overflow-y-auto overflow-x-hidden scrollbar-thin py-2">
        {sections.map((sec, i) => (
          <div key={i} className="mb-1">
            {sec.label && !collapsed && (
              <div className="px-4 pt-3 pb-1 text-[9.5px] uppercase tracking-wider font-semibold" style={{ color: "var(--sidebar-faint, #6b6e7a)" }}>{sec.label}</div>
            )}
            <div className="px-1.5">
              {sec.items.map((it) => {
                const active = it.actionId === currentActionId;
                return (
                  <button
                    key={it.id}
                    onClick={() => onNavigate(it.actionId)}
                    title={collapsed ? it.label : undefined}
                    className="w-full group flex items-center gap-2.5 px-3 my-0.5 rounded-md h-9 transition-colors text-[13px]"
                    style={{
                      background: active ? "var(--sidebar-active-bg, rgba(232,128,76,0.16))" : "transparent",
                      color: active ? "var(--sidebar-active-fg, #f49967)" : "var(--sidebar-text, #d6d1c4)",
                      border: `1px solid ${active ? "var(--sidebar-active-bd, rgba(232,128,76,0.3))" : "transparent"}`,
                    }}
                    onMouseEnter={(e) => { if (!active) e.currentTarget.style.background = "rgba(255,255,255,0.04)"; }}
                    onMouseLeave={(e) => { if (!active) e.currentTarget.style.background = "transparent"; }}
                  >
                    <Icon name={it.icon} size={14} style={{ color: active ? "var(--sidebar-active-fg, #f49967)" : "var(--sidebar-muted, #9095a3)" }} />
                    {!collapsed && <span className="truncate flex-1 text-left">{it.label}</span>}
                    {!collapsed && (
                      <span className="text-[9.5px] font-mono tabular-nums" style={{ color: active ? "var(--sidebar-active-fg, rgba(244,153,103,0.6))" : "rgba(255,255,255,0.18)" }}>
                        {it.actionId}
                      </span>
                    )}
                  </button>
                );
              })}
            </div>
          </div>
        ))}
      </nav>

      {/* Footer: user identity */}
      <div className={`p-2 ${collapsed ? "flex justify-center" : ""}`} style={{ borderTop: "1px solid var(--sidebar-border, rgba(255,255,255,0.05))" }}>
        <div className={`flex items-center gap-2.5 rounded-md p-2 ${collapsed ? "" : "hover:bg-white/5 cursor-pointer w-full"}`} title={persona.name}>
          <Avatar persona={persona} size={collapsed ? 30 : 32} />
          {!collapsed && (
            <div className="min-w-0 flex-1">
              <div className="text-[13px] font-medium text-white truncate">{persona.name}</div>
              <div className="text-[10.5px] truncate" style={{ color: "var(--sidebar-muted, #9095a3)" }}>{persona.title}</div>
            </div>
          )}
        </div>
      </div>
    </aside>
  );
};

// ---------- Top bar ----------
const TopBar = ({ title, subtitle, persona, role, onMenuClick, isAdmin, isEditing, onStartEdit, onStopEdit, onSaveEdit, hasDraft }) => (
  <header className="h-14 flex items-center px-4 sm:px-6 gap-3 shrink-0" style={{ background: "var(--surface)", borderBottom: "1px solid var(--border)" }}>
    <div className="min-w-0 flex-1">
      <div className="flex items-center gap-2 min-w-0">
        <h1 className="text-[14.5px] font-semibold truncate" style={{ color: "var(--ink)" }}>{title}</h1>
        {isEditing && (
          <span className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-semibold pop">
            <Icon name="sliders" size={10} /> Edit mode
          </span>
        )}
      </div>
      {subtitle && <div className="text-[11.5px] truncate" style={{ color: "var(--muted)" }}>{subtitle}</div>}
    </div>

    {isAdmin && (
      <div className="flex items-center gap-1.5">
        {isEditing ? (
          <>
            {hasDraft && (
              <Btn variant="primary" onClick={onSaveEdit}>
                <Icon name="save" size={13} /> Save
              </Btn>
            )}
            <Btn variant="secondary" onClick={onStopEdit}>
              <Icon name="x" size={13} /> Done editing
            </Btn>
          </>
        ) : (
          <Btn variant="secondary" onClick={onStartEdit}>
            <Icon name="sliders" size={13} /> <span className="hidden sm:inline">Edit configuration</span>
          </Btn>
        )}
      </div>
    )}

    <button
      onClick={onMenuClick}
      className="h-9 inline-flex items-center gap-2 pl-1 pr-2 rounded-full hover:bg-[var(--surface-2)]"
      title="Account"
    >
      <Avatar persona={persona} size={28} />
      <div className="hidden sm:block text-left leading-tight">
        <div className="text-[11.5px] font-medium" style={{ color: "var(--ink)" }}>{persona.name.split(" ")[0]}</div>
        <div className="text-[10px]" style={{ color: "var(--muted)" }}>{role}</div>
      </div>
      <Icon name="chevronDown" size={12} style={{ color: "var(--subtle)" }} />
    </button>
  </header>
);

// ---------- Persona switcher ----------
const PersonaSwitcher = ({ role, setRole }) => {
  const [open, setOpen] = useSh_S(false);
  const ref = useSh_R(null);
  useSh_E(() => {
    if (!open) return;
    const onDown = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); };
    document.addEventListener("mousedown", onDown);
    return () => document.removeEventListener("mousedown", onDown);
  }, [open]);
  const persona = PERSONAS[role];
  return (
    <div ref={ref} className="fixed bottom-4 right-4 z-40 select-none">
      {open && (
        <div className="mb-2 w-[300px] rounded-xl overflow-hidden backdrop-fade"
             style={{ background: "var(--sidebar-bg-2, #171b22)", color: "var(--sidebar-text, #d6d1c4)", boxShadow: "var(--shadow-lg)", border: "1px solid var(--sidebar-border, rgba(255,255,255,0.06))" }}>
          <div className="px-3 pt-3 pb-2 flex items-center gap-2">
            <span className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-semibold uppercase tracking-wider"
                  style={{ background: "var(--sidebar-active-bg, rgba(232,128,76,0.18))", color: "var(--sidebar-active-fg, #f0b65d)", border: "1px solid var(--sidebar-active-bd, rgba(232,128,76,0.3))" }}>
              <Icon name="sparkles" size={10} /> Demo
            </span>
            <span className="text-[12px]" style={{ color: "#a0a4b0" }}>Switch preview user</span>
          </div>
          <div className="px-1.5 pb-2">
            {ROLES.map((r) => {
              const p = PERSONAS[r.id];
              const active = r.id === role;
              return (
                <button
                  key={r.id}
                  onClick={() => { setRole(r.id); setOpen(false); }}
                  className="w-full flex items-center gap-2.5 px-2 py-2 rounded-md text-left transition-colors"
                  style={{ background: active ? "rgba(255,255,255,0.04)" : "transparent" }}
                  onMouseEnter={(e) => { if (!active) e.currentTarget.style.background = "rgba(255,255,255,0.02)"; }}
                  onMouseLeave={(e) => { if (!active) e.currentTarget.style.background = "transparent"; }}
                >
                  <Avatar persona={p} size={32} />
                  <div className="min-w-0 flex-1">
                    <div className="text-[13px] font-medium text-white truncate">{p.name}</div>
                    <div className="text-[10.5px] truncate" style={{ color: "var(--sidebar-muted, #9095a3)" }}>{r.id} · {r.blurb}</div>
                  </div>
                  {active && <span style={{ color: "var(--sidebar-active-fg, #f0b65d)" }}><Icon name="check" size={14} /></span>}
                </button>
              );
            })}
          </div>
        </div>
      )}
      <button
        onClick={() => setOpen((v) => !v)}
        className="flex items-center gap-2.5 pl-1.5 pr-3 py-1.5 rounded-full transition-colors"
        style={{ background: "var(--sidebar-bg-2, #171b22)", color: "var(--sidebar-text, #f3efe5)", boxShadow: "var(--shadow-md)", border: "1px solid var(--sidebar-border, rgba(255,255,255,0.06))" }}
      >
        <Avatar persona={persona} size={28} />
        <div className="text-left leading-tight">
          <div className="text-[9.5px] uppercase tracking-wider font-semibold" style={{ color: "var(--sidebar-active-fg, #f0b65d)" }}>Previewing as</div>
          <div className="text-[12px] font-medium">{persona.name} · {role}</div>
        </div>
        <Icon name={open ? "chevronDown" : "chevronUp"} size={13} style={{ color: "var(--sidebar-muted, #9095a3)" }} />
      </button>
    </div>
  );
};

// ---------- Account modal (placeholder) ----------
const AccountModal = ({ open, onClose, persona, role }) => (
  <Modal open={open} onClose={onClose} title="Account" subtitle={`Signed in as ${role}`}>
    <div className="flex items-center gap-3">
      <Avatar persona={persona} size={48} />
      <div>
        <div className="text-[15px] font-semibold" style={{ color: "var(--ink)" }}>{persona.name}</div>
        <div className="text-[12.5px]" style={{ color: "var(--muted)" }}>{persona.title}</div>
      </div>
    </div>
    <div className="mt-4 text-[12.5px] leading-relaxed p-3 rounded" style={{ background: "var(--surface-2)", color: "var(--muted)" }}>
      In production this would link to user settings, billing, sign-out. The prototype's "Switch user" is the persona widget in the bottom-right.
    </div>
  </Modal>
);

// ---------- Not-allowed page ----------
const NotAllowedPage = ({ persona, role }) => (
  <div className="max-w-md mx-auto mt-20 text-center">
    <div className="h-12 w-12 mx-auto mb-3 rounded-full inline-flex items-center justify-center" style={{ background: "var(--surface-3)" }}>
      <Icon name="shield" size={20} style={{ color: "var(--subtle)" }} />
    </div>
    <div className="text-[15px] font-semibold" style={{ color: "var(--ink)" }}>Page not available</div>
    <div className="text-[13px] mt-1" style={{ color: "var(--muted)" }}>
      {persona.name} doesn't have access to this action. Switch preview user in the bottom-right.
    </div>
  </div>
);

Object.assign(window, { Sidebar, TopBar, PersonaSwitcher, AccountModal, NotAllowedPage });
