/* =========================================================
   VERSION A WEB v2 — Alternative hero (sticker flyer board).
   Reuses everything from versionA-web/screens.jsx except the
   home page hero, which is replaced with a paper-flyer board.
   ========================================================= */
const { useState, useEffect } = React;

function FlyerHero({ go, addToCart }) {
  // Featured = the 6 owner-picked slots (live-linked to the management panel via Store/featuredSlot).
  // Empty slots fall back to sale-then-any so the 6-tile board is never broken.
  const featured = window.pickFeatured ? window.pickFeatured(6) : window.PRODUCTS.slice(0, 6);
  // Hand-placed slots captured from flyer-editor.html — left%, top%, rotation (size = % of board).
  const SLOTS = [
    { left: 3.72, top: 1.01, rot: -0.1 },
    { left: 33.63, top: 4.57, rot: 19.1 },
    { left: 69.09, top: 2.2, rot: -10.3 },
    { left: 5.49, top: 48.75, rot: 17 },
    { left: 38.42, top: 54.33, rot: -17.1 },
    { left: 69.09, top: 54.33, rot: 20.6 },
  ];
  const TW = 30.91, TH = 45.67;

  return (
    <>
      <section className="hero-flyer">
        <div className="inner">
          <div className="copy">
            <span className="eyebrow-stamp">מוצרים מובילים</span>
            <h1>הבית שלך<br/>במחיר <span className="underline">הוגן.</span></h1>
            <p className="blurb">
              כל מה שצריך לבית במחירים הטובים בגוש דן. הזמינו עכשיו — משלוח עד הבית תוך 24 שעות.
            </p>
            <div className="cta-stack">
              <div className="cta-row">
                <button className="cta-big" onClick={() => { const nav = document.querySelector('.nav-strip'); const head = document.querySelector('.section-head'); if (head) window.scrollTo({ top: window.scrollY + head.getBoundingClientRect().top - (nav ? nav.offsetHeight : 0) - 16, behavior: 'smooth' }); }}>
                  לקנות עכשיו ←
                </button>
                <button className="cta-ghost" onClick={() => window.location.href = 'tel:03-6053532'}>
                  📞 03-6053532
                </button>
              </div>
              <button className="cta-list" onClick={() => go('list')}>
                📝 רשימה ידנית
              </button>
            </div>
          </div>

          <div className="sticker-board" style={{ height: 460 }}>
            {featured.map((p, i) => {
              const s = SLOTS[i] || { left: 0, top: 0, rot: 0 };
              return (
                <div
                  key={p.id}
                  className="flyer-card"
                  style={{ left: s.left + '%', top: s.top + '%', width: TW + '%', height: TH + '%', transform: `rotate(${s.rot}deg)`, zIndex: i + 1 }}
                  onClick={() => go('product/' + p.id)}
                >
                  <div className="tape"></div>
                  <div className="photo" style={{ backgroundImage: `url(${p.image})` }}></div>
                  {window.topPromos && window.topPromos(p, 1).length > 0 && (
                    <div className="promo-badge flyer">
                      {window.topPromos(p, 1).map((t, i) => <span key={i} className="promo-chip">{t.qty} ב-{window.fmtPrice(t.price)}₪</span>)}
                    </div>
                  )}
                  <div className="label">
                    <div className="nm">{p.name}</div>
                    <span className="pricetag">{window.fmtPrice(p.price)}<span className="nis">₪</span></span>
                    <span className="vat-note">כולל מע״מ</span>
                  </div>
                </div>
              );
            })}
          </div>
        </div>
      </section>

      <div className="hero-ribbon">
        <div className="inner">
          <span className="ribbon-item"><span className="ic">🚚</span>משלוח עד הבית</span>
          <span className="sep"></span>
          <span className="ribbon-item"><span className="ic">🛍️</span>איסוף עצמי</span>
          <span className="sep"></span>
          <span className="ribbon-item"><span className="ic">⭐</span>37 שנות ותק</span>
          <span className="sep"></span>
          <span className="ribbon-item"><span className="ic">💰</span>מחירים שכונתיים</span>
          <span className="sep"></span>
          <span className="ribbon-item"><span className="ic">📞</span>03-6053532</span>
          <span className="sep"></span>
          <span className="ribbon-item">כל המחירים כוללים מע״מ</span>
        </div>
      </div>
    </>
  );
}

function HomeAWebV2({ go, cart, addToCart, activeCat, setActiveCat }) {
  const [activeSub, setActiveSub] = useState(null);
  useEffect(() => { setActiveSub(null); }, [activeCat]);   // reset sub when the category changes (incl. via NavStrip)
  const filtered = window.PRODUCTS.filter(p => {
    if (activeCat === 'sale') { if (!p.sale) return false; }
    else if (activeCat === 'eco') { if (!p.eco) return false; }
    else if (activeCat === 'natural') { if (!p.natural) return false; }
    else if (activeCat !== 'all') { if (p.cat !== activeCat) return false; }
    if (activeSub && p.subcat !== activeSub) return false;
    return true;
  });
  const activeCatObj = window.CATEGORIES.find(c => c.id === activeCat);
  const subs = (activeCatObj && activeCatObj.subs) || [];
  const headLabel = activeSub ? activeSub
    : activeCat === 'all' ? <>כל <span className="accent">המוצרים</span></>
    : activeCat === 'eco' ? 'מוצרים אקולוגיים'
    : activeCat === 'natural' ? 'מוצרים טבעיים'
    : activeCatObj?.name;

  return (
    <>
      <SignHeader />
      <NavStrip go={go} cart={cart} activeCat={activeCat} setActiveCat={setActiveCat} />

      <FlyerHero go={go} addToCart={addToCart} />

      <div className="section-shell">
        <div className="cat-row">
          {window.CATEGORIES.map(c => (
            <button
              key={c.id}
              className={'cat-chip' + (activeCat === c.id ? ' active' : '')}
              onClick={() => setActiveCat(c.id)}
            >{c.name}</button>
          ))}
          <button className={'cat-chip tag-chip eco' + (activeCat === 'eco' ? ' active' : '')} onClick={() => setActiveCat('eco')}>אקולוגי</button>
          <button className={'cat-chip tag-chip natural' + (activeCat === 'natural' ? ' active' : '')} onClick={() => setActiveCat('natural')}>טבעי</button>
        </div>

        {subs.length > 0 && (
          <div className="subcat-row">
            <button className={'subcat-chip' + (activeSub === null ? ' active' : '')} onClick={() => setActiveSub(null)}>הכל</button>
            {subs.map((s, i) => (
              <button key={i} className={'subcat-chip' + (activeSub === s ? ' active' : '')} onClick={() => setActiveSub(s)}>{s}</button>
            ))}
          </div>
        )}

        <div className="section-head">
          <h2>{headLabel}</h2>
          <span className="count">{filtered.length} מוצרים</span>
        </div>

        <div className="prod-grid">
          {filtered.map(p => (
            <div key={p.id} className={'product-card' + (p.inStock === false ? ' is-oos' : '')} onClick={() => go('product/' + p.id)}>
              <div className="ph" style={{ backgroundImage: `url(${p.image})` }}>
                {p.sale && <div className="sale-burst">מבצע!</div>}
                {p.inStock === false && <div className="oos-badge">לא במלאי</div>}
                {window.topPromos && window.topPromos(p).length > 0 && (
                  <div className="promo-badge">
                    {window.topPromos(p).map((t, i) => <span key={i} className="promo-chip">{t.qty} ב-{window.fmtPrice(t.price)}₪</span>)}
                  </div>
                )}
              </div>
              <div className="info">
                <h3 className="name">{p.name}</h3>
                <div className="sub">{p.sub}</div>
                {(p.eco || p.natural) && (
                  <div className="tag-badges">
                    {p.eco && <span className="tag-badge eco">אקולוגי</span>}
                    {p.natural && <span className="tag-badge natural">טבעי</span>}
                  </div>
                )}
                <div className="price-row">
                  <div>
                    <span className="price-tag">{window.fmtPrice(p.price)}<span className="nis">₪</span></span>
                    <div className="vat-note">כולל מע״מ</div>
                  </div>
                  {p.inStock !== false && <button className="add-btn" onClick={(e) => { e.stopPropagation(); addToCart(p.id, 1); }}>+ להוסיף</button>}
                </div>
              </div>
            </div>
          ))}
        </div>
      </div>

      <div className="about-band">
        <div className="inner">
          <div className="img-stack">
            <div className="a-img big" style={{ backgroundImage: 'url(assets/storefront-1.jpeg)' }}></div>
            <div className="a-img small" style={{ backgroundImage: 'url(assets/storefront-4.jpeg)' }}></div>
          </div>
          <div>
            <h3>על החנות</h3>
            <h2>שכונה. ותק. מחיר הוגן.</h2>
            <p>כל-בו יחזקאל פתח את הדלתות באבן גבירול לפני כמעט 40 שנה. מאז הפכנו לכתובת של כל המשפחות בשכונה — מכל מה שצריך לניקוי הבית ועד לחומרי הדברה שלא משאירים מקקים. בלי הפתעות במחיר, עם שירות שאי אפשר לקבל ברשת.</p>
            <div className="badges">
              <span className="badge">37 שנות ותק</span>
              <span className="badge">משלוחים</span>
              <span className="badge">מאות מוצרים</span>
              <span className="badge">שירות אישי</span>
            </div>
          </div>
        </div>
      </div>

      <Footer />
    </>
  );
}

/* -------------------- Router (uses v2 home + shared other screens) -------------------- */
function App() {
  const [route, setRoute] = useState(() => parseHash());
  const [cart, setCart] = useState(() => (window.Store ? Store.getCart() : {}));
  const [lastOrder, setLastOrder] = useState(null);
  const [activeCat, setActiveCat] = useState('all');
  // re-render when the catalog syncs from the server (new/updated products) so the store is never stale
  const [, bumpProducts] = useState(0);
  useEffect(() => (window.Store && Store.onProductsChange) ? Store.onProductsChange(() => bumpProducts(n => n + 1)) : undefined, []);

  // persist the cart so it survives a refresh / coming back later
  useEffect(() => { if (window.Store) Store.setCart(cart); }, [cart]);

  useEffect(() => {
    const onHash = () => setRoute(parseHash());
    window.addEventListener('hashchange', onHash);
    return () => window.removeEventListener('hashchange', onHash);
  }, []);
  const prevRoute = React.useRef(route);
  useEffect(() => {
    // The product modal is an overlay: don't scroll when it opens (→ product) or when it
    // closes back to the grid (product → home). Cart → home is also skipped because the
    // control that triggers it (menu chip / "הוסף מוצרים") scrolls to its own section.
    // Everything else (e.g. home → cart) is a new page → jump to the top.
    const wasProduct = prevRoute.current.startsWith('product/');
    const isProduct = route.startsWith('product/');
    const closingModalToHome = wasProduct && route === 'home';
    const cartToHome = prevRoute.current === 'cart' && route === 'home';
    if (!isProduct && !closingModalToHome && !cartToHome) window.scrollTo({ top: 0, behavior: 'instant' });
    prevRoute.current = route;
  }, [route]);

  const prevRouteFade = React.useRef(route);
  React.useLayoutEffect(() => {
    // Yellow wipe when going from the cart back into the store (menu buttons or "הוסף מוצרים").
    if (prevRouteFade.current === 'cart' && route === 'home') {
      const fade = document.getElementById('route-fade');
      if (fade) { fade.classList.remove('on'); void fade.offsetWidth; fade.classList.add('on'); }
    }
    prevRouteFade.current = route;
  }, [route]);

  function parseHash() { return window.location.hash.replace(/^#\/?/, '') || 'home'; }
  function go(path) { window.location.hash = '/' + path; }

  function addToCart(id, qty = 1) {
    setCart(prev => ({ ...prev, [id]: (prev[id] || 0) + qty }));
  }
  function updateQty(id, qty) {
    setCart(prev => {
      const next = { ...prev };
      if (qty <= 0) delete next[id]; else next[id] = qty;
      return next;
    });
  }
  function clearCart() { setCart({}); }
  async function submitOrder(details) {
    if (window.Store) {
      const items = Object.entries(cart).map(([id, qty]) => ({ id, qty }));
      const order = await Store.placeOrder({ ...details, items });   // server assigns the real order number → tracking link is valid
      setLastOrder({ ...details, id: order.id, method: order.method, items });
    } else {
      const id = String(4128 + Math.floor(Math.random() * 50));
      setLastOrder({ ...details, id });
    }
  }

  const common = { activeCat, setActiveCat, go, cart };

  if (route.startsWith('product/')) {
    return (
      <>
        <HomeAWebV2 {...common} addToCart={addToCart} />
        <ProductAWeb id={route.split('/')[1]} go={go} addToCart={addToCart} />
      </>
    );
  }
  if (route === 'cart') return <CartAWeb {...common} updateQty={updateQty} />;
  if (route === 'checkout') return <CheckoutAWeb {...common} submit={submitOrder} />;
  if (route === 'confirm') return <ConfirmAWeb {...common} lastOrder={lastOrder} clearCart={clearCart} />;
  if (route === 'list') return <ListBuilderAWeb {...common} />;
  return <HomeAWebV2 {...common} addToCart={addToCart} />;
}

ReactDOM.createRoot(document.getElementById('app-root')).render(<App />);
