/* eslint-disable no-undef */
// Shared components for NoorKara

function GemSvg({ color = '#6B1F2A', accent = '#E55A6E', cut = 'round', size = 220 }) {
  // Use defs/gradient for inner shimmer
  const id = React.useMemo(() => 'g' + Math.random().toString(36).slice(2, 9), []);
  const w = 200, h = 200, cx = 100, cy = 100;

  let outline, facets;
  if (cut === 'round') {
    outline = `M ${cx} 25 L 165 70 L 145 165 L 55 165 L 35 70 Z`;
    facets = [
      `M ${cx} 25 L 100 80 L 165 70 Z`,
      `M ${cx} 25 L 100 80 L 35 70 Z`,
      `M 165 70 L 100 80 L 145 165 Z`,
      `M 35 70 L 100 80 L 55 165 Z`,
      `M 145 165 L 100 80 L 55 165 Z`,
    ];
  } else if (cut === 'oval') {
    outline = `M ${cx} 20 L 160 60 L 170 100 L 160 140 L ${cx} 180 L 40 140 L 30 100 L 40 60 Z`;
    facets = [
      `M ${cx} 20 L 100 100 L 160 60 Z`,
      `M ${cx} 20 L 100 100 L 40 60 Z`,
      `M 170 100 L 100 100 L 160 140 Z`,
      `M 30 100 L 100 100 L 40 140 Z`,
      `M ${cx} 180 L 100 100 L 160 140 Z`,
      `M ${cx} 180 L 100 100 L 40 140 Z`,
      `M 160 60 L 100 100 L 170 100 Z`,
      `M 40 60 L 100 100 L 30 100 Z`,
    ];
  } else if (cut === 'cushion') {
    outline = `M 50 30 Q 30 30 30 50 L 30 150 Q 30 170 50 170 L 150 170 Q 170 170 170 150 L 170 50 Q 170 30 150 30 Z`;
    facets = [
      `M 50 30 L 100 90 L 150 30 Z`,
      `M 30 50 L 100 90 L 50 30 Z`,
      `M 170 50 L 100 90 L 150 30 Z`,
      `M 30 150 L 100 90 L 30 50 Z`,
      `M 170 150 L 100 90 L 170 50 Z`,
      `M 50 170 L 100 90 L 30 150 Z`,
      `M 150 170 L 100 90 L 170 150 Z`,
      `M 50 170 L 100 90 L 150 170 Z`,
    ];
  } else if (cut === 'pear') {
    outline = `M ${cx} 20 Q 60 50 50 100 Q 50 170 ${cx} 180 Q 150 170 150 100 Q 140 50 ${cx} 20 Z`;
    facets = [
      `M ${cx} 20 L 100 110 L 50 100 Z`,
      `M ${cx} 20 L 100 110 L 150 100 Z`,
      `M 50 100 L 100 110 L 100 180 Z`,
      `M 150 100 L 100 110 L 100 180 Z`,
    ];
  } else if (cut === 'emerald') {
    outline = `M 60 30 L 140 30 L 170 60 L 170 140 L 140 170 L 60 170 L 30 140 L 30 60 Z`;
    facets = [
      `M 60 30 L 80 60 L 140 30 Z`,
      `M 140 30 L 80 60 L 120 60 Z`,
      `M 140 30 L 170 60 L 120 60 Z`,
      `M 60 30 L 30 60 L 80 60 Z`,
      `M 30 60 L 80 60 L 80 140 L 30 140 Z`,
      `M 170 60 L 120 60 L 120 140 L 170 140 Z`,
      `M 80 140 L 60 170 L 140 170 L 120 140 Z`,
      `M 30 140 L 60 170 L 80 140 Z`,
      `M 170 140 L 140 170 L 120 140 Z`,
      `M 80 60 L 120 60 L 120 140 L 80 140 Z`,
    ];
  } else { // marquise
    outline = `M 100 20 Q 170 100 100 180 Q 30 100 100 20 Z`;
    facets = [
      `M 100 20 L 100 100 L 150 70 Z`,
      `M 100 20 L 100 100 L 50 70 Z`,
      `M 100 180 L 100 100 L 150 130 Z`,
      `M 100 180 L 100 100 L 50 130 Z`,
    ];
  }

  return (
    <svg viewBox={`0 0 ${w} ${h}`} width={size} height={size} style={{ overflow: 'visible' }}>
      <defs>
        <radialGradient id={id + 'inner'} cx="40%" cy="35%" r="65%">
          <stop offset="0%" stopColor={accent} stopOpacity="0.95" />
          <stop offset="55%" stopColor={color} stopOpacity="1" />
          <stop offset="100%" stopColor={color} stopOpacity="1" />
        </radialGradient>
        <linearGradient id={id + 'sheen'} x1="0%" y1="0%" x2="100%" y2="100%">
          <stop offset="0%" stopColor="#fff" stopOpacity="0.55" />
          <stop offset="40%" stopColor="#fff" stopOpacity="0" />
        </linearGradient>
        <filter id={id + 'shadow'} x="-20%" y="-20%" width="140%" height="140%">
          <feGaussianBlur in="SourceAlpha" stdDeviation="3" />
          <feOffset dx="0" dy="6" result="off" />
          <feComponentTransfer><feFuncA type="linear" slope="0.25" /></feComponentTransfer>
          <feMerge><feMergeNode /><feMergeNode in="SourceGraphic" /></feMerge>
        </filter>
      </defs>
      <g filter={`url(#${id}shadow)`}>
        <path d={outline} fill={`url(#${id}inner)`} stroke={color} strokeWidth="0.6" strokeOpacity="0.4" />
        {facets.map((f, i) => (
          <path key={i} d={f} fill="#000" fillOpacity={(i % 2 === 0 ? 0.08 : 0.16)} stroke={accent} strokeOpacity="0.18" strokeWidth="0.5" />
        ))}
        <path d={outline} fill={`url(#${id}sheen)`} />
      </g>
    </svg>
  );
}

// Pick a cut by gem id for stable variety
function cutFor(id) {
  const map = {
    ruby: 'oval', emerald: 'emerald', 'blue-sapphire': 'cushion', 'yellow-sapphire': 'cushion',
    pearl: 'round', coral: 'oval', hessonite: 'cushion', 'cats-eye': 'oval',
    amethyst: 'pear', topaz: 'pear', citrine: 'cushion', garnet: 'round',
    turquoise: 'oval', opal: 'pear', diamond: 'round', aquamarine: 'emerald',
  };
  return map[id] || 'round';
}

function Logo({ size = 28 }) {
  return (
    <span className="site-nav__brand">
      <svg width={size} height={size} viewBox="0 0 32 32" style={{ marginRight: 4 }}>
        <defs>
          <linearGradient id="lg" x1="0" y1="0" x2="1" y2="1">
            <stop offset="0" stopColor="#6B1F2A" />
            <stop offset="1" stopColor="#E08A1F" />
          </linearGradient>
        </defs>
        <path d="M 16 3 L 28 11 L 24 28 L 8 28 L 4 11 Z" fill="url(#lg)" />
        <path d="M 16 3 L 16 14 L 28 11 Z" fill="#000" fillOpacity="0.18" />
        <path d="M 16 3 L 16 14 L 4 11 Z" fill="#000" fillOpacity="0.10" />
        <path d="M 16 14 L 24 28 L 8 28 Z" fill="#000" fillOpacity="0.14" />
      </svg>
      <span>NoorKara</span>
      <span className="deva">नूरकारा</span>
    </span>
  );
}

function Nav({ active = 'home' }) {
  const [open, setOpen] = React.useState(false);
  React.useEffect(() => {
    document.body.style.overflow = open ? 'hidden' : '';
    return () => { document.body.style.overflow = ''; };
  }, [open]);
  React.useEffect(() => {
    if (!open) return;
    const onKey = (e) => { if (e.key === 'Escape') setOpen(false); };
    document.addEventListener('keydown', onKey);
    return () => document.removeEventListener('keydown', onKey);
  }, [open]);
  const links = [
    { href: '/', label: 'Home', key: 'home' },
    { href: 'shop', label: 'Shop', key: 'shop' },
    { href: 'navaratna', label: 'Navaratna', key: 'navaratna' },
    { href: 'guide', label: 'Guide', key: 'guide' },
    { href: 'story', label: 'Our Story', key: 'story' },
    { href: 'journal', label: 'Journal', key: 'journal' },
    { href: 'contact', label: 'Contact', key: 'contact' },
  ];
  return (
    <>
    <a href="#main" className="skip-link">Skip to content</a>
    <header className="site-nav">
      <a href="/" aria-label="NoorKara home"><Logo /></a>
      <nav className="site-nav__links" aria-label="Primary">
        {links.map(l => (
          <a key={l.key} href={l.href} className={active === l.key ? 'active' : ''}>{l.label}</a>
        ))}
      </nav>
      <div className="site-nav__cta">
        <a href="wishlist" className="icon-btn" title="Wishlist" aria-label="View wishlist">
          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><path d="M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z" /></svg>
        </a>
        <button className="site-nav__toggle" onClick={() => setOpen(true)} aria-label="Open menu" aria-expanded={open}>
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><line x1="3" y1="7" x2="21" y2="7"/><line x1="3" y1="13" x2="21" y2="13"/><line x1="3" y1="19" x2="21" y2="19"/></svg>
        </button>
      </div>
      <div className={'site-nav__drawer' + (open ? ' open' : '')} role="dialog" aria-modal="true" aria-hidden={!open}>
        <div className="site-nav__drawer-head">
          <Logo />
          <button className="icon-btn" onClick={() => setOpen(false)} aria-label="Close menu">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2"><line x1="6" y1="6" x2="18" y2="18"/><line x1="6" y1="18" x2="18" y2="6"/></svg>
          </button>
        </div>
        <ul>
          {links.map(l => (
            <li key={l.key}><a href={l.href} className={active === l.key ? 'active' : ''}>{l.label}</a></li>
          ))}
        </ul>
        <a href="https://wa.me/919818127988?text=Hello%20Poonam%2C%20I%27d%20like%20to%20know%20more%20about%20NoorKara%20gemstones." target="_blank" rel="noopener" className="btn btn--whatsapp" style={{ marginTop: 24, justifyContent: 'center' }}>
          <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51"/></svg>
          WhatsApp Poonam
        </a>
        <div className="site-nav__drawer-foot">
          <div style={{ marginBottom: 6 }}>+91 98181 27988 · poonam@noorkara.in</div>
          Karol Bagh · Delhi · 110005
        </div>
      </div>
    </header>
    <a id="main" tabIndex="-1" aria-hidden="true" style={{ position: 'absolute', width: 1, height: 1, overflow: 'hidden', clip: 'rect(0 0 0 0)' }}></a>
    </>
  );
}

function Footer() {
  return (
    <footer className="site-foot">
      <div className="site-foot__grid">
        <div>
          <div className="site-foot__brand">NoorKara <span className="deva" style={{ fontSize: 22, color: 'var(--gold-soft)' }}>नूरकारा</span></div>
          <p style={{ fontSize: 14, opacity: 0.75, maxWidth: 380, lineHeight: 1.7 }}>
            Curated precious and semi-precious gemstones, sourced personally from Delhi's heritage gem markets. Each ratna comes with a story, certification, and the founder's word.
          </p>
          <div style={{ display: 'flex', gap: 12, marginTop: 24 }}>
            <button className="icon-btn" style={{ borderColor: 'rgba(247,242,233,0.3)', color: 'var(--paper)' }}>
              <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2.16c3.2 0 3.58.01 4.85.07 3.25.15 4.77 1.69 4.92 4.92.06 1.27.07 1.65.07 4.85s-.01 3.58-.07 4.85c-.15 3.23-1.66 4.77-4.92 4.92-1.27.06-1.65.07-4.85.07s-3.58-.01-4.85-.07c-3.26-.15-4.77-1.7-4.92-4.92C2.17 15.58 2.16 15.2 2.16 12s.01-3.58.07-4.85C2.38 3.92 3.9 2.38 7.15 2.23 8.42 2.17 8.8 2.16 12 2.16zM12 0C8.74 0 8.33.01 7.05.07 2.7.27.27 2.69.07 7.05.01 8.33 0 8.74 0 12s.01 3.67.07 4.95c.2 4.36 2.62 6.78 6.98 6.98C8.33 23.99 8.74 24 12 24s3.67-.01 4.95-.07c4.35-.2 6.78-2.62 6.98-6.98.06-1.28.07-1.69.07-4.95s-.01-3.67-.07-4.95c-.2-4.35-2.62-6.78-6.98-6.98C15.67.01 15.26 0 12 0zm0 5.84A6.16 6.16 0 1018.16 12 6.16 6.16 0 0012 5.84zM12 16a4 4 0 110-8 4 4 0 010 8zm6.4-11.85a1.44 1.44 0 100 2.88 1.44 1.44 0 000-2.88z" /></svg>
            </button>
            <button className="icon-btn" style={{ borderColor: 'rgba(247,242,233,0.3)', color: 'var(--paper)' }}>
              <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M22.675 0H1.325C.593 0 0 .593 0 1.325v21.351C0 23.407.593 24 1.325 24H12.82v-9.294H9.692v-3.622h3.128V8.413c0-3.1 1.893-4.788 4.659-4.788 1.325 0 2.463.099 2.795.143v3.24l-1.918.001c-1.504 0-1.795.715-1.795 1.763v2.313h3.587l-.467 3.622h-3.12V24h6.116c.73 0 1.323-.593 1.323-1.325V1.325C24 .593 23.407 0 22.675 0z" /></svg>
            </button>
            <button className="icon-btn" style={{ borderColor: 'rgba(247,242,233,0.3)', color: 'var(--paper)' }}>
              <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z" /></svg>
            </button>
          </div>
        </div>
        <div>
          <h4>Shop</h4>
          <ul>
            <li><a href="shop">All gemstones</a></li>
            <li><a href="shop?k=precious">Precious</a></li>
            <li><a href="shop?k=semi">Semi-precious</a></li>
            <li><a href="navaratna">Navaratna nine</a></li>
          </ul>
        </div>
        <div>
          <h4>Learn</h4>
          <ul>
            <li><a href="guide">Gemstone guide</a></li>
            <li><a href="navaratna">Find your gem</a></li>
            <li><a href="journal">Journal</a></li>
            <li><a href="story">Our story</a></li>
          </ul>
        </div>
        <div>
          <h4>Contact</h4>
          <ul>
            <li>Karol Bagh, New Delhi</li>
            <li><a href="mailto:poonam@noorkara.in">poonam@noorkara.in</a></li>
            <li>+91 98181 27988</li>
            <li><a href="contact">WhatsApp inquiry</a></li>
          </ul>
        </div>
      </div>
      <div className="site-foot__legal">
        <span>© 2026 NoorKara · A Poonam Gupta proprietorship · GSTIN 07AAACN0000A1Z5</span>
        <span>Crafted with care in Delhi · दिल्ली</span>
      </div>
    </footer>
  );
}

function Marquee({ items }) {
  const list = [...items, ...items];
  return (
    <div className="marquee">
      <div className="marquee__track">
        {list.map((it, i) => (
          <React.Fragment key={i}>
            <span>{it.en}</span>
            <span className="dot" />
            <span className="deva">{it.hi}</span>
            <span className="dot" />
          </React.Fragment>
        ))}
      </div>
    </div>
  );
}

function GemPhoto({ gem, sizeAttr = '70%', className }) {
  const [errored, setErrored] = React.useState(false);
  if (errored) {
    return (
      <div className="gem-bg" style={{ background: `radial-gradient(ellipse at 50% 50%, ${gem.accent}22, transparent 70%), var(--paper-2)` }}>
        <GemSvg color={gem.color} accent={gem.accent} cut={cutFor(gem.id)} size={sizeAttr} />
      </div>
    );
  }
  return (
    <img
      src={`/assets/gems/${gem.id}.jpg`}
      alt={`${gem.name} — ${gem.kind === 'precious' ? 'precious' : 'semi-precious'} gemstone, ${gem.carat}, ${gem.clarity} clarity, sourced from ${gem.origin}.`}
      loading="lazy" decoding="async"
      onError={() => setErrored(true)}
      className={className || 'gem-photo'}
      style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }}
    />
  );
}

function GemCard({ gem, onWishlist, wished, onOpen }) {
  return (
    <article className="gem-card" onClick={() => onOpen?.(gem)}>
      <div className="gem-card__media hover-reveal">
        <GemPhoto gem={gem} />
        <button className={'gem-card__wishlist' + (wished ? ' active' : '')} onClick={(e) => { e.stopPropagation(); onWishlist?.(gem.id); }} aria-label="Add to wishlist">
          <svg viewBox="0 0 24 24"><path d="M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z" /></svg>
        </button>
        <span className="gem-card__tag">{gem.kind === 'precious' ? 'Precious' : 'Semi-precious'}</span>
      </div>
      <div>
        <div className="gem-card__name">
          {gem.name} <span className="deva" style={{ fontSize: 16, color: 'var(--maroon)', opacity: 0.7 }}>{gem.sanskrit}</span>
        </div>
        <div className="gem-card__meta">
          <span>{gem.carat}</span>
          <span>{gem.clarity}</span>
          <span>{gem.origin}</span>
        </div>
        <div style={{ marginTop: 6, fontSize: 12, letterSpacing: '0.08em', color: 'var(--maroon)', textTransform: 'uppercase' }}>{gem.tag} · {gem.price}</div>
      </div>
    </article>
  );
}

function useWishlist() {
  const [w, setW] = React.useState(() => {
    try { return JSON.parse(localStorage.getItem('nk_wish') || '[]'); } catch { return []; }
  });
  React.useEffect(() => { localStorage.setItem('nk_wish', JSON.stringify(w)); }, [w]);
  const toggle = (id) => setW((arr) => arr.includes(id) ? arr.filter(x => x !== id) : [...arr, id]);
  return [w, toggle];
}

function Toast({ msg, onDone }) {
  React.useEffect(() => {
    if (!msg) return;
    const t = setTimeout(onDone, 2200);
    return () => clearTimeout(t);
  }, [msg, onDone]);
  if (!msg) return null;
  return <div className="toast">{msg}</div>;
}

// Persistent floating WhatsApp button — appears on every page on mobile,
// reaches Poonam directly with optional pre-filled context.
function FloatingWhatsApp({ context = 'general' }) {
  const messages = {
    general:    "Hello Poonam, I'd like to know more about NoorKara gemstones.",
    shop:       "Hello Poonam, I'm browsing the NoorKara collection — could you help me pick?",
    product:    "Hello Poonam, I'd like to inquire about a gemstone I saw on NoorKara.",
    navaratna:  "Hello Poonam, I'd like guidance on choosing my Navaratna gemstone.",
    guide:      "Hello Poonam, I have a question about gemstone certification and grading.",
    story:      "Hello Poonam, I read your story on NoorKara and would love to talk gems.",
    journal:    "Hello Poonam, I'm enjoying the NoorKara journal — could we talk?",
    contact:    "Hello Poonam, I'd like to get in touch about NoorKara.",
    wishlist:   "Hello Poonam, I've added some pieces to my wishlist on NoorKara — could we discuss?",
  };
  const msg = messages[context] || messages.general;
  const href = `https://wa.me/919818127988?text=${encodeURIComponent(msg)}`;
  return (
    <a href={href} target="_blank" rel="noopener" className="nk-whatsapp-fab" aria-label="Chat with Poonam on WhatsApp">
      <svg viewBox="0 0 24 24" width="26" height="26" fill="currentColor" aria-hidden="true">
        <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/>
      </svg>
      <span className="nk-whatsapp-fab__label">Chat</span>
    </a>
  );
}

// expose to window
Object.assign(window, { GemSvg, GemPhoto, cutFor, Logo, Nav, Footer, Marquee, GemCard, useWishlist, Toast, FloatingWhatsApp });
