/* global React */

// ── icons ────────────────────────────────────────────────────────────
const Icon = ({ name, size = 16 }) => {
  const paths = {
    arrowSm: <><path d="M4 10h12" /><path d="m11 5 5 5-5 5" /></>
  };
  return (
    <svg width={size} height={size} viewBox="0 0 24 24" fill="none"
    stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round">
      {paths[name]}
    </svg>);

};

// ── header ───────────────────────────────────────────────────────────
const Header = ({ route, setRoute }) => {
  const link = (id, label) =>
  <a className={route === id ? "active" : ""}
  onClick={(e) => {e.preventDefault();setRoute(id);}}
  href={`#${id}`}>{label}</a>;

  return (
    <header className="hdr">
      <div className="wrap hdr-inner">
        <nav className="hdr-nav">
          {link("shop", "Shop")}
          {link("events", "Events")}
          {link("gallery", "Gallery")}
          {link("about", "About Us")}
        </nav>
        <a className="hdr-logo" onClick={(e) => {e.preventDefault();setRoute("shop");}} href="#shop">
          <div>Sparkle <span className="amp">’n’</span> Shine</div>
          <span className="hdr-logo-sub">Handmade Jewelry</span>
        </a>
        <span className="hdr-spacer" aria-hidden="true"></span>
      </div>
    </header>);

};

// ── footer ───────────────────────────────────────────────────────────
const Footer = ({ setRoute }) =>
<footer className="ftr">
    <div className="wrap">
      <div className="ftr-custom">
        <div>
          <div className="eyebrow" style={{ marginBottom: 12, color: "var(--accent-2)" }}>Custom Orders</div>
          <h3 className="ftr-custom-h">Want something made just for you?</h3>
        </div>
        <a className="btn ftr-custom-btn"
           href="mailto:sparkleNshineBySK@outlook.com?subject=Custom%20Order%20Request">
          To place your custom order, email: sparkleNshineBySK@outlook.com
        </a>
      </div>
      <div className="ftr-top">
        <div>
          <div className="ftr-logo">Sparkle <span className="amp">’n’</span> Shine</div>
          <p className="ftr-blurb">
            Handmade jewelry by two sisters — crafted from natural stones, beads,
            and high-quality materials. Every piece is made with care, built to
            last, and something you'll love to wear.
          </p>
        </div>
        <div>
          <h5>Explore</h5>
          <ul>
            <li><a onClick={() => setRoute("shop")}>Shop all jewelry</a></li>
            <li><a onClick={() => setRoute("about")}>About us</a></li>
            <li><a href="mailto:sparkleNshineBySK@outlook.com">Custom orders</a></li>
          </ul>
        </div>
      </div>
      <div className="ftr-bot">
        <div>© 2026 Sparkle ’n’ Shine · Handmade with love</div>
      </div>
    </div>
  </footer>;


// ── product card (photo · name · description · price) ─────────────────
const ProductCard = ({ p }) =>
<article className="pcard">
    <div className="pcard-media">
      <img src={p.img} alt={p.name} style={{ objectFit: "cover" }} />
    </div>
    <div className="pcard-info">
      <div className="pcard-cat">{p.cat}</div>
      <h3 className="pcard-name">{p.name}</h3>
      <p className="pcard-desc">{p.desc}</p>
      <div className="pcard-foot">
        <span className="pcard-price">${p.price}</span>
        <span className="pcard-mat">{p.mat}</span>
      </div>
    </div>
  </article>;


// ── hero photo fader (decorative side images) ─────────────────────────
const HERO_POS = ["hf-1", "hf-2", "hf-3", "hf-4", "hf-5", "hf-6"];

const HeroFrame = ({ images, pos, delay, startIdx }) => {
  const [idx, setIdx] = React.useState(startIdx);
  const [on, setOn] = React.useState(false);
  React.useEffect(() => {
    let tFade, tSwap, tStart;
    const cycle = () => {
      setOn(true); // fade in
      tFade = setTimeout(() => {
        setOn(false); // fade out
        tSwap = setTimeout(() => {
          setIdx((i) => (i + 1 + Math.floor(Math.random() * (images.length - 1))) % images.length);
          cycle();
        }, 1700); // stay hidden, then swap
      }, 3200 + Math.random() * 2800); // visible duration
    };
    tStart = setTimeout(cycle, delay);
    return () => {clearTimeout(tStart);clearTimeout(tFade);clearTimeout(tSwap);};
  }, []);
  return (
    <div className={`hf-frame ${pos}`} aria-hidden="true">
      <img src={images[idx].img} alt="" style={{ opacity: on ? 1 : 0 }} />
    </div>);

};

const HeroFader = ({ products }) =>
<div className="hero-fades" aria-hidden="true">
    {HERO_POS.map((pos, i) =>
  <HeroFrame key={pos} images={products} pos={pos}
  delay={i * 650} startIdx={i % products.length} />
  )}
  </div>;


Object.assign(window, { Icon, Header, Footer, ProductCard, HeroFader });