// Shared components: Nav, Footer, Fraction motif, ProductCard, etc.

const Frac = ({ size = 22, light = false }) => (
  <span className="frac" style={{ fontSize: size }}>
    <span className="num" style={{ fontWeight: light ? 300 : 400 }}>1</span>
    <span className="slash">⁄</span>
    <span className="den">3</span>
  </span>
);

const NavLink = ({ to, current, navigate, children }) => (
  <a
    href={"#" + to}
    className={current === to ? "is-active" : ""}
    onClick={(e) => { e.preventDefault(); navigate(to); }}
  >{children}</a>
);

const Nav = ({ current, navigate, inverse = false }) => {
  const [open, setOpen] = React.useState(false);

  const close = () => {
    setOpen(false);
    document.body.style.overflow = "";
  };
  const toggle = () => {
    setOpen(o => {
      document.body.style.overflow = !o ? "hidden" : "";
      return !o;
    });
  };
  const go = (path) => { close(); navigate(path); };

  return (
    <React.Fragment>
      <nav className={"nav" + (inverse ? " inverse" : "")}>
        <div className="nav-inner">
          <a href="#/" className="nav-logo" onClick={(e) => { e.preventDefault(); go("/"); }}>
            <img src="assets/logo-wordmark.png" alt="onethird" style={{ height: 28, width: "auto", display: "block" }} />
          </a>
          <div className="nav-links">
            <NavLink to="/products" current={current} navigate={navigate}>Products</NavLink>
            <NavLink to="/story" current={current} navigate={navigate}>Our Story</NavLink>
            <NavLink to="/find" current={current} navigate={navigate}>Find Us</NavLink>
            <a href="https://s.shopee.co.id/1VvwO9eQx3" target="_blank" rel="noreferrer">Shopee</a>
          </div>
          <button className={"nav-hamburger" + (open ? " open" : "")} onClick={toggle} aria-label="Menu">
            <span /><span /><span />
          </button>
        </div>
      </nav>
      <div className={"nav-mobile" + (open ? " open" : "") + (inverse ? " inverse" : "")}>
        <a href="#/products" onClick={(e) => { e.preventDefault(); go("/products"); }}>Products</a>
        <a href="#/story" onClick={(e) => { e.preventDefault(); go("/story"); }}>Our Story</a>
        <a href="#/find" onClick={(e) => { e.preventDefault(); go("/find"); }}>Find Us</a>
        <a href="https://s.shopee.co.id/1VvwO9eQx3" target="_blank" rel="noreferrer" onClick={close}>Shopee ↗</a>
      </div>
    </React.Fragment>
  );
};

const Footer = ({ navigate }) => (
  <footer className="foot">
    <div className="foot-grid">
      <div className="col-span-3">
        <img src="assets/logo-wordmark.png" alt="onethird" style={{ height: 36, width: "auto", display: "block", filter: "invert(1)", opacity: 0.9 }} />
        <p style={{ fontFamily: "var(--serif)", fontSize: 22, fontStyle: "italic", lineHeight: 1.2, margin: "20px 0 0", maxWidth: 280, color: "rgba(241,235,223,0.65)" }}>
          We make the first two thirds. Your skin finishes what we start.
        </p>
      </div>
      <div className="col-span-3">
        <h4>Onethird, est. 2023</h4>
      </div>
      <div className="col-span-2">
        <h4>Browse</h4>
        <ul>
          <li><a href="#/products" onClick={(e) => { e.preventDefault(); navigate("/products"); }}>All scents</a></li>
          <li><a href="#/story" onClick={(e) => { e.preventDefault(); navigate("/story"); }}>Our story</a></li>
          <li><a href="#/find" onClick={(e) => { e.preventDefault(); navigate("/find"); }}>Find us</a></li>
          <li><a href="https://s.shopee.co.id/1VvwO9eQx3" target="_blank" rel="noreferrer">Shopee</a></li>
        </ul>
      </div>
      <div className="col-span-2">
        <h4>Visit</h4>
        <ul>
          <li><a href="#/find" onClick={(e) => { e.preventDefault(); navigate("/find"); }}>Find a store →</a></li>
        </ul>
      </div>
      <div className="col-span-2">
        <h4>Contact</h4>
        <ul>
          <li><a href="mailto:onethird.ofc@gmail.com">onethird.ofc@gmail.com</a></li>
          <li><a href="https://wa.me/6287789777109" target="_blank" rel="noreferrer">+62 877-8977-7109</a></li>
          <li><a href="https://instagram.com/onethird_id" target="_blank" rel="noreferrer">@onethird_id</a></li>
        </ul>
      </div>
    </div>

    <div className="foot-bottom">
      <span>© 2026 onethird, Tangerang ID</span>
    </div>
  </footer>
);

// Reusable product card
const ProductCard = ({ p, navigate, density = "regular" }) => (
  <a href={"#/p/" + p.id} className="pcard" onClick={(e) => { e.preventDefault(); navigate("/p/" + p.id); }}>
    {p.image
      ? <img src={p.image} alt={p.name} style={{ aspectRatio: density === "tight" ? "3/4" : "4/5", width: "100%", display: "block", objectFit: "cover" }} />
      : <div className="ph pcard-img" data-label={"Bottle · " + p.name + " · " + p.volume} style={{ aspectRatio: density === "tight" ? "3/4" : "4/5" }}></div>
    }
    <div className="pcard-meta">
      <div>
        <div className="pcard-name">{p.name}</div>
        <div className="pcard-sub">{Array.isArray(p.family) ? p.family.join(" · ") : p.family} · {p.translation}</div>
      </div>
      <div style={{ textAlign: "right" }}>
        <div className="pcard-num">№ {p.num}</div>
        <div className="pcard-num" style={{ marginTop: 6, color: "var(--ink)" }}>{formatIDR(p.price)}</div>
      </div>
    </div>
  </a>
);

// Section label — small mono with fraction tag
const SectionTag = ({ index = "01", total = "05", label }) => (
  <div style={{ display: "flex", alignItems: "baseline", gap: 14, paddingBottom: 28 }}>
    <span className="mono" style={{ fontSize: 11, letterSpacing: "0.18em", textTransform: "uppercase" }}>
      {index} <span style={{ display: "inline-block", width: 18, height: 1, background: "currentColor", verticalAlign: "middle", margin: "0 4px" }}></span> {total}
    </span>
    <span className="mono" style={{ fontSize: 11, letterSpacing: "0.18em", textTransform: "uppercase", opacity: 0.55 }}>{label}</span>
  </div>
);

// Big oversized fraction display element
const BigFrac = ({ size = 360, opacity = 1, color = "currentColor" }) => (
  <div style={{ position: "relative", lineHeight: 0.8, color, opacity }}>
    <span style={{ fontFamily: "var(--serif)", fontSize: size, fontStyle: "italic", display: "inline-block" }}>1</span>
    <span style={{
      position: "absolute",
      width: size * 1.1,
      height: 1.5,
      background: "currentColor",
      transform: "rotate(-65deg)",
      transformOrigin: "left center",
      top: size * 0.5,
      left: size * 0.18,
    }}></span>
    <span style={{ fontFamily: "var(--serif)", fontSize: size, fontWeight: 500, display: "inline-block", marginLeft: size * 0.05 }}>3</span>
  </div>
);

// Notes pyramid — used on product page and on home
const NotesPyramid = ({ top, middle, base, dark = false }) => {
  const c = dark ? "var(--cream)" : "var(--ink)";
  const mute = dark ? "rgba(241,235,223,0.55)" : "var(--ink-mute)";
  const Row = ({ label, frac, items, idx }) => (
    <div style={{
      display: "grid",
      gridTemplateColumns: "80px 1fr auto",
      alignItems: "baseline",
      gap: 24,
      padding: "22px 0",
      borderTop: idx === 0 ? "none" : "1px solid " + (dark ? "rgba(241,235,223,0.2)" : "rgba(15,14,12,0.18)"),
    }}>
      <span className="mono" style={{ fontSize: 11, letterSpacing: ".18em", textTransform: "uppercase", color: mute }}>{frac}</span>
      <div>
        <div style={{ fontFamily: "var(--serif)", fontStyle: "italic", fontSize: 36, lineHeight: 1, color: c }}>{label}</div>
        <ul style={{ listStyle: "none", padding: 0, margin: "12px 0 0", display: "flex", flexWrap: "wrap", gap: "6px 18px" }}>
          {items.map((n, i) => (
            <li key={i} style={{ fontFamily: "var(--mono)", fontSize: 12, letterSpacing: ".06em", color: c }}>
              <span style={{ opacity: 0.4, marginRight: 6 }}>·</span>{n}
            </li>
          ))}
        </ul>
      </div>
      <span className="mono" style={{ fontSize: 10, letterSpacing: ".18em", textTransform: "uppercase", color: mute }}>{["First impression", "Heart", "Final third (yours)"][idx]}</span>
    </div>
  );
  return (
    <div>
      <Row label="Top" frac="1/3" items={top} idx={0} />
      <Row label="Middle" frac="2/3" items={middle} idx={1} />
      <Row label="Base" frac="3/3" items={base} idx={2} />
    </div>
  );
};

Object.assign(window, { Frac, Nav, Footer, ProductCard, SectionTag, BigFrac, NotesPyramid, NavLink });
