// menu.jsx — three menu layout variations + filters
const { useState: useStateM, useMemo, useEffect: useEffectM } = React;

function FilterBar({ q, setQ, catFilter, setCatFilter, statusFilter, setStatusFilter, unlocked }) {
  return (
    <div className="filterbar">
      <div className="filterbar-row">
        <label className="search-field">
          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
          <input placeholder="Search strain, format, notes…" value={q} onChange={e => setQ(e.target.value)}/>
        </label>
        <div className="filter-chips">
          {['all','available','low','soon','out'].map(s => (
            <button key={s} className={`chip ${statusFilter === s ? 'chip-on' : ''}`}
                    onClick={() => setStatusFilter(s)}>
              {s === 'all' ? 'All stock' : STATUS_META[s]?.label || s}
            </button>
          ))}
        </div>
        <div className={`unlock-hint ${unlocked ? 'on' : ''}`}>
          {unlocked ? '✓ Prices unlocked' : '🔒 Prices token-gated'}
        </div>
      </div>
    </div>
  );
}

// ──────────────────────────────────────────────────────────────────────
// Layout A — Sidebar + main list table
function SidebarLayout({ products, catFilter, setCatFilter, unlocked, onOpen }) {
  const counts = useMemo(() => {
    const c = {};
    PRODUCTS.forEach(p => { c[p.cat] = (c[p.cat] || 0) + 1; });
    return c;
  }, []);
  return (
    <div className="layout-sidebar">
      <aside className="sidebar-cats">
        <span className="sidebar-eyebrow">§ Process</span>
        <button className={`cat-row ${catFilter === 'all' ? 'on' : ''}`} onClick={() => setCatFilter('all')}>
          <span className="cat-icon" style={{background:'#3a1010', color:'#ff3a3a'}}>★</span>
          <span className="cat-name">All processes</span>
          <span className="cat-count">{PRODUCTS.length}</span>
        </button>
        {CATEGORIES.map(c => (
          <button key={c.id} className={`cat-row ${catFilter === c.id ? 'on' : ''}`}
                  onClick={() => setCatFilter(c.id)} style={{'--cat-accent':c.accent}}>
            <span className="cat-icon" style={{background:`color-mix(in srgb, ${c.accent} 20%, transparent)`, color:c.accent}}>{c.icon}</span>
            <span className="cat-name">{c.name}</span>
            <span className="cat-count">{counts[c.id] || 0}</span>
          </button>
        ))}
      </aside>
      <div className="sidebar-main">
        <ProductTable products={products} unlocked={unlocked} onOpen={onOpen}/>
      </div>
    </div>
  );
}

function ProductTable({ products, unlocked, onOpen }) {
  if (!products.length) {
    return <div className="empty-card">No products match. Loosen the filters.</div>;
  }
  const grouped = useMemo(() => {
    const g = {};
    products.forEach(p => { (g[p.cat] ||= []).push(p); });
    return CATEGORIES.filter(c => g[c.id]).map(c => [c, g[c.id]]);
  }, [products]);

  return (
    <div className="tables">
      {grouped.map(([cat, items]) => (
        <section key={cat.id} className="table-block" style={{'--cat-accent':cat.accent}}>
          <header className="table-header">
            <span className="cat-icon-sm" style={{color:cat.accent, borderColor:cat.accent}}>{cat.icon}</span>
            <h3>{cat.name}</h3>
            <span className="table-meta">{items.length} SKU{items.length === 1 ? '' : 's'}</span>
          </header>
          <table className="prod-table">
            <thead>
              <tr>
                <th>Product</th><th>Format</th>
                <th className="num">THC</th><th className="num">Total</th><th className="num">Terps</th>
                <th>Status</th><th className="num">Price</th><th className="num">MOQ</th>
                <th>COA</th>
              </tr>
            </thead>
            <tbody>
              {items.map(p => <ProductRow key={p.id} p={p} unlocked={unlocked} onOpen={onOpen}/>)}
            </tbody>
          </table>
        </section>
      ))}
    </div>
  );
}

function ProductRow({ p, unlocked, onOpen }) {
  const sm = STATUS_META[p.status] || STATUS_META.available;
  return (
    <tr className={`prod-row ${p.flag === 'restocked' ? 'just-restocked' : ''}`}
        onClick={() => onOpen(p)}>
      <td className="cell-name">
        <span className="prod-name">{p.name}</span>
        <span className="prod-notes">{p.notes}</span>
      </td>
      <td className="t-mono">{p.format}</td>
      <td className="num t-mono">{p.thc === 'TBD' ? '—' : `${p.thc}%`}</td>
      <td className="num t-mono">{p.total === 'TBD' ? '—' : `${p.total}%`}</td>
      <td className="num t-mono">{p.terps === 'TBD' ? '—' : `${p.terps}%`}</td>
      <td>
        <span className="badge" style={{color:sm.tone, background:sm.bg, borderColor:sm.bd}}>
          <span className="badge-dot" style={{background:sm.tone}}></span>
          {sm.label}
        </span>
        {p.flag === 'restocked' && (
          <span className="badge badge-flag" style={{color:STATUS_META.restocked.tone, background:STATUS_META.restocked.bg, borderColor:STATUS_META.restocked.bd}}>
            ↑ restocked
          </span>
        )}
      </td>
      <td className="num t-mono">{unlocked ? <span className="price">{p.price}</span> : <span className="locked">—</span>}</td>
      <td className="num t-mono">{unlocked ? p.moq : <span className="locked">—</span>}</td>
      <td><span className="coa-pill" onClick={e => { e.stopPropagation(); alert('COA opens on the detail page'); }}>COA</span></td>
    </tr>
  );
}

// ──────────────────────────────────────────────────────────────────────
// Layout B — Hybrid card grid that expands inline
function HybridLayout({ products, catFilter, setCatFilter, unlocked, onOpen }) {
  return (
    <div className="layout-hybrid">
      <div className="cat-strip">
        <button className={`cat-pill ${catFilter === 'all' ? 'on' : ''}`} onClick={() => setCatFilter('all')}>All</button>
        {CATEGORIES.map(c => (
          <button key={c.id} className={`cat-pill ${catFilter === c.id ? 'on' : ''}`}
                  onClick={() => setCatFilter(c.id)} style={{'--cat-accent':c.accent}}>
            <span className="cat-pill-dot" style={{background:c.accent}}></span>
            {c.name}
          </button>
        ))}
      </div>
      <div className="card-grid">
        {products.map(p => <ProductCard key={p.id} p={p} unlocked={unlocked} onOpen={onOpen}/>)}
        {!products.length && <div className="empty-card">No products match.</div>}
      </div>
    </div>
  );
}

function ProductCard({ p, unlocked, onOpen }) {
  const cat = CATEGORIES.find(c => c.id === p.cat);
  const sm = STATUS_META[p.status] || STATUS_META.available;
  return (
    <article className={`p-card ${p.flag === 'restocked' ? 'just-restocked' : ''}`}
             onClick={() => onOpen(p)} style={{'--cat-accent':cat?.accent}}>
      <div className="p-card-photo">
        <span className="p-card-initial">{p.name.split(' ').slice(0,2).map(w => w[0]).join('')}</span>
        <span className="p-card-cat-tag">{cat?.icon} {cat?.name}</span>
      </div>
      <div className="p-card-body">
        <div className="p-card-top">
          <span className={`strain strain-${p.strain.toLowerCase()}`}>{p.strain}</span>
          <span className="badge" style={{color:sm.tone, background:sm.bg, borderColor:sm.bd}}>
            <span className="badge-dot" style={{background:sm.tone}}></span>{sm.label}
          </span>
        </div>
        <h3 className="p-card-name">{p.name}</h3>
        <p className="p-card-notes">{p.notes}</p>
        <div className="p-card-kpis">
          <div><small>THC</small><b>{p.thc === 'TBD' ? '—' : `${p.thc}%`}</b></div>
          <div><small>Total</small><b>{p.total === 'TBD' ? '—' : `${p.total}%`}</b></div>
          <div><small>Terps</small><b>{p.terps === 'TBD' ? '—' : `${p.terps}%`}</b></div>
          <div><small>CBD</small><b>{p.cbd === 'TBD' ? '—' : `${p.cbd}%`}</b></div>
        </div>
        <div className="p-card-foot">
          <span className="t-mono price-small">{unlocked ? p.price : 'token req.'}</span>
          <span className="t-mono">{p.format}</span>
        </div>
      </div>
    </article>
  );
}

// ──────────────────────────────────────────────────────────────────────
// Layout C — Magazine spread (editorial, features hero product)
function MagazineLayout({ products, catFilter, setCatFilter, unlocked, onOpen }) {
  // Feature first available product, then split rest by category
  const hero = products.find(p => p.status === 'available') || products[0];
  const rest = products.filter(p => p.id !== hero?.id);
  return (
    <div className="layout-magazine">
      <div className="mag-cats">
        <button className={`cat-tab ${catFilter === 'all' ? 'on' : ''}`} onClick={() => setCatFilter('all')}>All issues</button>
        {CATEGORIES.map(c => (
          <button key={c.id} className={`cat-tab ${catFilter === c.id ? 'on' : ''}`}
                  onClick={() => setCatFilter(c.id)}>{c.name}</button>
        ))}
      </div>
      {hero && (
        <article className="mag-hero" onClick={() => onOpen(hero)}>
          <div className="mag-hero-meta">
            <span className="num">FEATURE</span>
            <span className="strain strain-{hero.strain?.toLowerCase()}">{hero?.strain}</span>
          </div>
          <h2 className="mag-hero-title display-md">{hero.name}</h2>
          <p className="mag-hero-lede">{hero.description}</p>
          <div className="mag-hero-kpis">
            <div><small>THC</small><b>{hero.thc}%</b></div>
            <div><small>Total cannabinoids</small><b>{hero.total}%</b></div>
            <div><small>Terps</small><b>{hero.terps}%</b></div>
            <div><small>Format</small><b>{hero.format}</b></div>
            <div><small>Price</small><b>{unlocked ? hero.price : '—'}</b></div>
          </div>
          <div className="mag-hero-photo">
            <span className="p-card-initial big">{hero.name.split(' ').slice(0,2).map(w => w[0]).join('')}</span>
          </div>
        </article>
      )}
      <div className="mag-list">
        {rest.map(p => (
          <button key={p.id} className="mag-item" onClick={() => onOpen(p)}>
            <span className="mag-item-no">{String(products.indexOf(p)+1).padStart(2,'0')}</span>
            <div className="mag-item-body">
              <div className="mag-item-head">
                <h4>{p.name}</h4>
                <span className={`strain strain-${p.strain.toLowerCase()}`}>{p.strain}</span>
              </div>
              <p>{p.notes}</p>
            </div>
            <div className="mag-item-stats t-mono">
              <span>{p.thc === 'TBD' ? '—' : `${p.thc}%`} THC</span>
              <span>{p.terps === 'TBD' ? '—' : `${p.terps}%`} terps</span>
              <span>{unlocked ? p.price : '🔒'}</span>
            </div>
            <span className={`badge`} style={{color:STATUS_META[p.status]?.tone, background:STATUS_META[p.status]?.bg, borderColor:STATUS_META[p.status]?.bd}}>
              {STATUS_META[p.status]?.label}
            </span>
          </button>
        ))}
      </div>
    </div>
  );
}

Object.assign(window, { FilterBar, SidebarLayout, HybridLayout, MagazineLayout, ProductRow, ProductCard });
