// ============================================================
// OBPC — Shared components
// ============================================================

const { useState, useEffect, useRef } = React;

// ---------- Placeholder imagery ----------
const Placeholder = ({ label, aspect = "4/5", tone = "warm", className = "" }) => {
  const tones = {
    warm: { bg: "#1a0f0a", stripe: "rgba(255,255,255,0.04)", fg: "rgba(255,220,180,0.55)" },
    deep: { bg: "#0a0f1a", stripe: "rgba(255,255,255,0.04)", fg: "rgba(200,220,255,0.5)" },
    fire: { bg: "#2a0a00", stripe: "rgba(255,100,0,0.06)", fg: "rgba(255,180,120,0.6)" },
    ivory: { bg: "#f2ede3", stripe: "rgba(0,0,0,0.03)", fg: "rgba(60,40,20,0.55)" },
  };
  const t = tones[tone] || tones.warm;
  return (
    <div
      className={`obpc-ph ${className}`}
      style={{
        aspectRatio: aspect,
        background: `repeating-linear-gradient(135deg, ${t.bg} 0 12px, ${t.stripe} 12px 13px, ${t.bg} 13px 24px)`,
        color: t.fg,
        position: "relative",
        overflow: "hidden",
      }}
    >
      <div style={{
        position: "absolute", inset: 0,
        display: "flex", alignItems: "center", justifyContent: "center",
        fontFamily: "'JetBrains Mono', ui-monospace, monospace",
        fontSize: 11, letterSpacing: "0.12em", textTransform: "uppercase",
        textAlign: "center", padding: 16,
      }}>
        <span>▢ {label}</span>
      </div>
    </div>
  );
};

// ---------- Reveal on scroll ----------
const Reveal = ({ children, delay = 0, y = 30, className = "" }) => {
  const ref = useRef(null);
  const [shown, setShown] = useState(false);
  useEffect(() => {
    const io = new IntersectionObserver(
      ([e]) => { if (e.isIntersecting) { setShown(true); io.disconnect(); } },
      { threshold: 0.15 }
    );
    if (ref.current) io.observe(ref.current);
    return () => io.disconnect();
  }, []);
  return (
    <div
      ref={ref}
      className={className}
      style={{
        transform: shown ? "translateY(0)" : `translateY(${y}px)`,
        opacity: shown ? 1 : 0,
        transition: `transform 900ms cubic-bezier(.2,.7,.2,1) ${delay}ms, opacity 700ms ease ${delay}ms`,
      }}
    >
      {children}
    </div>
  );
};

// ---------- Marquee ----------
const Marquee = ({ items, accent }) => (
  <div className="obpc-marquee" style={{ borderTop: `1px solid ${accent}33`, borderBottom: `1px solid ${accent}33` }}>
    <div className="obpc-marquee-track">
      {[...items, ...items, ...items].map((it, i) => (
        <span key={i} className="obpc-marquee-item">
          <span className="obpc-marquee-dot" style={{ background: accent }} />
          {it}
        </span>
      ))}
    </div>
  </div>
);

// ---------- Nav ----------
const Nav = ({ accent, onJump }) => {
  const [scrolled, setScrolled] = useState(false);
  useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 40);
    window.addEventListener("scroll", onScroll, { passive: true });
    return () => window.removeEventListener("scroll", onScroll);
  }, []);
  return (
    <nav className={`obpc-nav ${scrolled ? "is-scrolled" : ""}`}>
      <div className="obpc-nav-inner">
        <a className="obpc-logo" href="#top" onClick={(e)=>{e.preventDefault(); onJump("top");}}>
          <span className="obpc-logo-mark" style={{ background: accent }}>
            <span>✝</span>
          </span>
          <span className="obpc-logo-text">
            <strong>OBPC</strong>
            <em>O Brasil Para Cristo · 1955</em>
          </span>
        </a>
        <ul className="obpc-nav-links">
          {[
            ["obra", "A Obra"],
            ["fundamentos", "Fundamentos"],
            ["ministerios", "Ministérios"],
            ["jubrac", "JUBRAC"],
            ["noticias", "Notícias"],
            ["agenda", "Agenda"],
          ].map(([id, label]) => (
            <li key={id}>
              <a href={`#${id}`} onClick={(e)=>{e.preventDefault(); onJump(id);}}>{label}</a>
            </li>
          ))}
        </ul>
        <a className="obpc-nav-cta" href="#jubrac" onClick={(e)=>{e.preventDefault(); onJump("jubrac");}} style={{ background: accent }}>
          Faça parte
          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5">
            <path d="M5 12h14M13 6l6 6-6 6"/>
          </svg>
        </a>
      </div>
    </nav>
  );
};

// ---------- Hero variant 1: Massive typography ----------
const HeroMassive = ({ palette }) => {
  const [time, setTime] = useState(0);
  useEffect(() => {
    let raf, start = performance.now();
    const loop = (t) => { setTime((t - start) / 1000); raf = requestAnimationFrame(loop); };
    raf = requestAnimationFrame(loop);
    return () => cancelAnimationFrame(raf);
  }, []);
  const y = Math.sin(time * 0.6) * 6;
  return (
    <section className="obpc-hero obpc-hero--massive" style={{ background: palette.bg, color: palette.fg }}>
      <div className="obpc-hero-meta">
        <span className="obpc-tag" style={{ borderColor: palette.accent, color: palette.accent }}>
          <span className="obpc-tag-dot" style={{ background: palette.accent }} />
          Movimento desde 1955
        </span>
        <span className="obpc-hero-coord">
          Jundiaí · SP / 23°11′S 46°53′W
        </span>
      </div>

      <h1 className="obpc-hero-title">
        <span className="obpc-hero-line">O Brasil</span>
        <span className="obpc-hero-line">
          <span style={{ color: palette.accent, fontStyle: "italic" }}>para</span>
        </span>
        <span className="obpc-hero-line">Cristo.</span>
      </h1>

      <div className="obpc-hero-foot">
        <p className="obpc-hero-lede">
          Não somos um prédio. Somos o agir de Deus na vida das pessoas —
          <strong> anúncio, libertação e restauração</strong> há mais de sete décadas.
        </p>
        <div className="obpc-hero-counter" style={{ transform: `translateY(${y}px)` }}>
          <div><em>70+</em><span>anos</span></div>
          <div><em>5</em><span>ministérios</span></div>
          <div><em>∞</em><span>vidas</span></div>
        </div>
      </div>
    </section>
  );
};

// ---------- Hero variant 2: Split editorial ----------
const HeroSplit = ({ palette }) => {
  return (
    <section className="obpc-hero obpc-hero--split" style={{ background: palette.bg, color: palette.fg }}>
      <div className="obpc-split-left">
        <span className="obpc-tag" style={{ borderColor: palette.accent, color: palette.accent }}>
          <span className="obpc-tag-dot" style={{ background: palette.accent }} />
          Est. 1955 · Obra Pentecostal
        </span>
        <h1 className="obpc-split-title">
          A Obra não <br/>é um lugar — <br/>
          <span style={{ color: palette.accent, fontStyle: "italic" }}>é uma vida</span><br/>
          transformada.
        </h1>
        <p className="obpc-split-lede">
          Fundada por Manoel de Mello, a <strong>OBPC</strong> é um movimento espiritual
          com uma missão clara: levar a Palavra de Deus a todos, sem distinção.
        </p>
        <div className="obpc-split-actions">
          <a className="obpc-btn obpc-btn--primary" style={{ background: palette.accent, color: palette.bg }} href="#obra">
            Conheça a Obra
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5"><path d="M5 12h14M13 6l6 6-6 6"/></svg>
          </a>
          <a className="obpc-btn obpc-btn--ghost" style={{ borderColor: palette.fg, color: palette.fg }} href="#ministerios">
            Ministérios
          </a>
        </div>
      </div>
      <div className="obpc-split-right">
        <Placeholder label="Foto — Culto pentecostal / mãos levantadas" aspect="3/4" tone="fire"/>
        <div className="obpc-split-caption" style={{ color: palette.muted }}>
          <em>Fig. 01</em> — Culto de adoração. Imagem a ser substituída por foto institucional.
        </div>
      </div>
    </section>
  );
};

// ---------- Hero variant 4: Unção (image) ----------
const HeroUncao = ({ palette }) => {
  const [scroll, setScroll] = useState(0);
  useEffect(() => {
    const onScroll = () => setScroll(window.scrollY);
    window.addEventListener("scroll", onScroll, { passive: true });
    return () => window.removeEventListener("scroll", onScroll);
  }, []);
  return (
    <section className="obpc-hero obpc-hero--uncao" style={{ background: palette.bg, color: palette.fg }}>
      <div className="obpc-uncao-img" style={{ transform: `translateY(${scroll * 0.25}px) scale(${1 + scroll * 0.0003})` }}>
        <img src={(window.__resources && window.__resources.capaUncao) || "/src/assets/capa-uncao.jpg"} alt="2026 — O Ano da Unção" />
        <div className="obpc-uncao-grad" style={{
          background: `linear-gradient(180deg, ${palette.bg}00 0%, ${palette.bg}aa 55%, ${palette.bg} 100%)`
        }}/>
      </div>
      <div className="obpc-uncao-top">
        <span className="obpc-tag" style={{ borderColor: palette.fg, color: palette.fg, background: `${palette.bg}55`, backdropFilter: "blur(10px)" }}>
          <span className="obpc-tag-dot" style={{ background: palette.accent }} />
          OBPC · 2026
        </span>
      </div>
      <div className="obpc-uncao-content">
        <div className="obpc-uncao-kicker" style={{ color: palette.fg }}>
          <span style={{ opacity: 0.7 }}>2026</span>
          <span style={{ color: palette.accent, letterSpacing: "0.08em" }}>— O ANO DA</span>
        </div>
        <h1 className="obpc-uncao-title">
          Un<span style={{ color: palette.accent, fontStyle: "italic" }}>ç</span>ão.
        </h1>
        <p className="obpc-uncao-lede">
          Um novo tempo na Obra. Consagração, serviço e a presença do Espírito Santo
          movendo vidas, famílias e comunidades por todo o Brasil.
        </p>
        <div className="obpc-uncao-actions">
          <a className="obpc-btn obpc-btn--primary" style={{ background: palette.accent, color: palette.bg }} href="#obra">
            A Obra em 2026
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5"><path d="M5 12h14M13 6l6 6-6 6"/></svg>
          </a>
          <a className="obpc-btn obpc-btn--ghost" style={{ borderColor: palette.fg, color: palette.fg }} href="#agenda">
            Ver agenda
          </a>
        </div>
      </div>
    </section>
  );
};

// ---------- Hero variant 3: Manifesto ----------
const HeroManifesto = ({ palette }) => {
  return (
    <section className="obpc-hero obpc-hero--manifesto" style={{ background: palette.bg, color: palette.fg }}>
      <div className="obpc-manifesto-head">
        <span className="obpc-tag" style={{ borderColor: palette.accent, color: palette.accent }}>
          <span className="obpc-tag-dot" style={{ background: palette.accent }} />
          Manifesto · OBPC 1955 — hoje
        </span>
        <span className="obpc-manifesto-num" style={{ color: palette.muted }}>§ 01</span>
      </div>
      <p className="obpc-manifesto-text">
        A Obra acontece quando alguém <span className="obpc-hl" style={{ background: palette.accent, color: palette.bg }}>é restaurado</span>.
        Quando alguém encontra <em style={{ color: palette.accent }}>esperança</em>.
        Quando alguém conhece Jesus de verdade. Mais do que participar, somos chamados a
        <span className="obpc-hl" style={{ background: palette.accent, color: palette.bg }}> fazer parte </span>
        dela. Porque a Obra não é sobre um prédio, uma organização ou um sistema — é sobre
        <strong> vidas sendo transformadas pelo poder de Deus</strong>, todos os dias, em cada culto, cada oração, cada encontro.
      </p>
      <div className="obpc-manifesto-foot">
        <div className="obpc-manifesto-sig">
          <span className="obpc-manifesto-sig-label">— assinado</span>
          <span className="obpc-manifesto-sig-name">Igreja do Evangelho Quadrangular Pentecostal</span>
        </div>
        <a className="obpc-btn obpc-btn--primary" style={{ background: palette.accent, color: palette.bg }} href="#obra">
          Continue lendo
          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5"><path d="M12 5v14M6 13l6 6 6-6"/></svg>
        </a>
      </div>
    </section>
  );
};

Object.assign(window, { Placeholder, Reveal, Marquee, Nav, HeroMassive, HeroSplit, HeroManifesto, HeroUncao });
