// Wasabil — site components (shared across pages)
// Usage: include after React + Babel, then render <App page="home" />

const { useState, useEffect, useRef } = React;

// -------- Mascot --------
// poses: default | clap | explain | zen | egg | genki | genki2 | genki3 | rest | baby | king | bttf | nimbus
const MASCOT_POSES = {
  default: "/assets/mascot.png",
  clap: "/assets/mascot-clap.png",
  explain: "/assets/mascot-explain.png",
  zen: "/assets/mascot-zen.png",
  egg: "/assets/mascot-egg.png",
  genki: "/assets/mascot-genki.png",
  genki2: "/assets/mascot-genki2.png",
  genki3: "/assets/mascot-genki3.png",
  "genki-a0": "/assets/mascot-genki-a0.png",
  "genki-a1": "/assets/mascot-genki-a1.png",
  "genki-a2": "/assets/mascot-genki-a2.png",
  "genki-a3": "/assets/mascot-genki-a3.png",
  "genki-a4": "/assets/mascot-genki-a4.png",
  "genki-a5": "/assets/mascot-genki-a5.png",
  "genki-a6": "/assets/mascot-genki-a6.png",
  "genki-a7": "/assets/mascot-genki-a7.png",
  "genki-a8": "/assets/mascot-genki-a8.png",
  "genki-a9": "/assets/mascot-genki-a9.png",
  rest: "/assets/mascot-rest.png",
  baby: "/assets/mascot-baby.png",
  king: "/assets/mascot-king.png",
  bttf: "/assets/mascot-bttf.png",
  nimbus: "/assets/mascot-nimbus.png",
};
function Mascot({ size = 40, style = {}, pose = "default" }) {
  const src = MASCOT_POSES[pose] || MASCOT_POSES.default;
  return (
    <img
      src={src}
      alt=""
      width={size}
      height={size}
      style={{ display: "block", objectFit: "contain", ...style }}
    />
  );
}

// -------- Nav --------
function Nav({ current = "home" }) {
  const [scrolled, setScrolled] = useState(false);
  const [menuOpen, setMenuOpen] = useState(false);
  const [isLoggedIn, setIsLoggedIn] = useState(false);
  useEffect(() => {
    setIsLoggedIn(document.cookie.split(';').some(c => c.trim().startsWith('wsbtoken=')));
  }, []);
  // Reactivo a cambios de paleta: observa data-palette del <html> y
  // actualiza el logo al instante (sin esperar la transición de 600ms).
  const computeIsDark = () => {
    const p = document.documentElement.dataset.palette;
    if (p === "light") return false;
    if (p === "dark") return true;
    const bg = getComputedStyle(document.documentElement).getPropertyValue("--bg").trim();
    if (bg.startsWith("#")) {
      const hex = bg.slice(1);
      const r = parseInt(hex.slice(0,2),16), g = parseInt(hex.slice(2,4),16), b = parseInt(hex.slice(4,6),16);
      return (r * 299 + g * 587 + b * 114) / 1000 < 128;
    }
    return true;
  };
  const [isDark, setIsDark] = useState(computeIsDark);
  useEffect(() => {
    const obs = new MutationObserver(() => setIsDark(computeIsDark()));
    obs.observe(document.documentElement, { attributes: true, attributeFilter: ["data-palette"] });
    return () => obs.disconnect();
  }, []);
  const logoSrc = isDark ? "/assets/logo-wasabil-dark.png" : "/assets/logo-wasabil.png";
  useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 8);
    window.addEventListener("scroll", onScroll);
    return () => window.removeEventListener("scroll", onScroll);
  }, []);
  useEffect(() => {
    if (menuOpen) document.body.style.overflow = "hidden";
    else document.body.style.overflow = "";
    return () => { document.body.style.overflow = ""; };
  }, [menuOpen]);
  const links = [
    { id: "producto", label: "Producto", href: "/producto/" },
    { id: "pricing", label: "Precios", href: "/pricing/" },
    { id: "about", label: "Nosotros", href: "/about/" },
    { id: "blog", label: "Blog", href: "/blog/" },
  ];
  return (
    <>
      <nav className={`nav ${scrolled ? "scrolled" : ""}`}>
        <div className="nav-inner">
          <a className="logo" href="/" style={{ position: "relative" }}>
            <img src={logoSrc} alt="Wasabil" style={{ height: 28, width: "auto", display: "block" }}/>
          </a>
          <div className="nav-links">
            {links.map(l => (
              <a key={l.id} className={`nav-link ${current === l.id ? "active" : ""}`} href={l.href}>
                {l.label}
              </a>
            ))}
          </div>
          <div className="nav-cta">
            <a className="nav-link nav-desktop-only" href="https://app.wasabil.com/login">Iniciar sesión</a>
            <a className="btn btn-ghost btn-sm nav-desktop-only" href="/agenda/">
              <svg width="12" height="12" viewBox="0 0 24 24" fill="none"><rect x="3" y="5" width="18" height="16" rx="2" stroke="currentColor" strokeWidth="1.8"/><path d="M3 9h18M8 3v4M16 3v4" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round"/></svg>
              Agenda
            </a>
            {!isLoggedIn && (
              <a className="btn btn-primary btn-sm" href="https://app.wasabil.com/register">
                Prueba gratis
                <svg width="12" height="12" viewBox="0 0 24 24" fill="none"><path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/></svg>
              </a>
            )}
            <button className="nav-burger" onClick={() => setMenuOpen(o => !o)} aria-label="Menú" aria-expanded={menuOpen}>
              {menuOpen
                ? <svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M6 6l12 12M6 18L18 6" stroke="currentColor" strokeWidth="2" strokeLinecap="round"/></svg>
                : <svg width="20" height="20" viewBox="0 0 24 24" fill="none"><path d="M4 6h16M4 12h16M4 18h16" stroke="currentColor" strokeWidth="2" strokeLinecap="round"/></svg>
              }
            </button>
          </div>
        </div>
      </nav>
      {menuOpen && (
        <div className="nav-mobile-menu" onClick={() => setMenuOpen(false)}>
          {links.map(l => (
            <a key={l.id} className={`nav-mobile-link ${current === l.id ? "active" : ""}`} href={l.href}>
              {l.label}
            </a>
          ))}
          <div className="nav-mobile-divider" />
          <a className="nav-mobile-link" href="https://app.wasabil.com/login">Iniciar sesión</a>
          <a className="nav-mobile-link" href="/agenda/">Agenda demo</a>
          {!isLoggedIn && (
            <a className="btn btn-primary" href="https://app.wasabil.com/register" style={{ marginTop: 8, textAlign: "center", justifyContent: "center" }}>
              Prueba gratis →
            </a>
          )}
        </div>
      )}
    </>
  );
}

// -------- Footer --------
function Footer() {
  return (
    <footer className="footer">
      <div className="container-wide">
        <div className="footer-grid">
          <div>
            <img src="/assets/logo-wasabil-dark.png" alt="Wasabil" style={{ height: 36, width: "auto", display: "block" }}/>
            <p style={{ marginTop: 16, maxWidth: 280, fontSize: 14, lineHeight: 1.6, color: "color-mix(in oklab, var(--bg) 70%, transparent)" }}>
              Effortless finances for growing businesses. Invoicing that just works.
            </p>
            <div style={{ marginTop: 20 }}>
              <span style={{ fontSize: 11, textTransform: "uppercase", letterSpacing: "0.1em", color: "color-mix(in oklab, var(--bg) 50%, transparent)" }}>Respaldado por</span>
              <p style={{ fontSize: 13, marginTop: 6, color: "color-mix(in oklab, var(--bg) 70%, transparent)" }}>Platanus Ventures · Start-Up Chile · Endeavor</p>
            </div>
          </div>
          <div>
            <h4>Producto</h4>
            <ul>
              <li><a href="/producto/#facturacion">Facturación electrónica</a></li>
              <li><a href="/producto/#ecommerce">eCommerce</a></li>
              <li><a href="/producto/#gastos">Gastos en el extranjero</a></li>
              <li><a href="/producto/#mcp">MCP & API</a></li>
              <li><a href="/pricing/">Precios</a></li>
            </ul>
          </div>
          <div>
            <h4>Compañía</h4>
            <ul>
              <li><a href="/about/">Nosotros</a></li>
              <li><a href="/blog/">Blog</a></li>
            </ul>
          </div>
          <div>
            <h4>Developers</h4>
            <ul>
              <li><a href="/developers/">Documentación</a></li>
            </ul>
          </div>
          <div>
            <h4>Recursos</h4>
            <ul>
              <li><a href="/pricing/#calculadora">Calculadora</a></li>
            </ul>
          </div>
          <div>
            <h4>Contacto</h4>
            <ul>
              <li><a href="/contacto/">Contacto</a></li>
              <li><a href="https://api.whatsapp.com/send/?phone=15557901156&text=Hola&type=phone_number&app_absent=0">WhatsApp Business</a></li>
              <li><a href="mailto:hola@wasabil.com">hola@wasabil.com</a></li>
              <li><a href="/agenda/">Agenda demo</a></li>
              <li><a href="https://www.linkedin.com/company/wasabil/">LinkedIn</a></li>
            </ul>
          </div>
        </div>
        <div className="footer-bottom">
          <span>© 2026 Wasabil SpA · Santiago, Chile</span>
          <span>
            <a href="/politicas-de-privacidad/" style={{ marginRight: 20 }}>Privacidad &amp; Seguridad</a>
            <a href="/terminos-y-condiciones/">Términos</a>
          </span>
        </div>
      </div>
    </footer>
  );
}

// -------- Logo cloud --------
function LogoCloud() {
  const brands = [
    { name: "Platanus Ventures", src: "/assets/logos/platanus-ventures.webp", h: 26 },
    { name: "Endeavor", src: "/assets/logos/endeavor.png", h: 22 },
    { name: "Start-Up Chile", src: "/assets/logos/startup-chile.png", h: 22 },
    { name: "SII", src: "/assets/logos/sii.png", h: 32 },
  ];
  // Cada logo va dentro de una "chip" con fondo claro fijo y borde sutil.
  // Así se ven igual en modo claro u oscuro, sin filtros que rompan logos a color.
  return (
    <div style={{ padding: "56px 0", borderTop: "1px solid var(--rule)", borderBottom: "1px solid var(--rule)" }}>
      <div className="container">
        <div style={{ display: "flex", alignItems: "center", gap: 32, flexWrap: "wrap", justifyContent: "space-between" }}>
          <span className="caption" style={{ flexShrink: 0 }}>Respaldados por</span>
          <div style={{ display: "flex", gap: 16, alignItems: "center", flexWrap: "wrap" }}>
            {brands.map(b => (
              <div key={b.name} data-logo-cloud-chip style={{
                background: "#ffffff",
                border: "1px solid #e3ddcf",
                borderRadius: 10,
                padding: "10px 18px",
                display: "grid",
                placeItems: "center",
                minHeight: 52,
              }}>
                <img src={b.src} alt={b.name} title={b.name} style={{ height: b.h, width: "auto", display: "block", opacity: 1, filter: "none" }} />
              </div>
            ))}
          </div>
        </div>
      </div>
    </div>
  );
}

Object.assign(window, { Mascot, Nav, Footer, LogoCloud });
