/* global React */
const { useState, useEffect, useRef } = React;

function useRevealObserver() {
  useEffect(() => {
    let cancelled = false;

    const reveal = (el) => {
      if (el.classList.contains("in")) return;
      el.classList.add("in");
      // Belt-and-suspenders: if the animation system is hosed (some iframe
      // environments stall keyframe animations), force the final state.
      // The animation still plays when it works, this only kicks in if it doesn't.
      setTimeout(() => {
        if (cancelled) return;
        try {
          const cs = getComputedStyle(el);
          if (parseFloat(cs.opacity) < 0.99) {
            el.style.opacity = "1";
            el.style.transform = "none";
            el.style.filter = "none";
          }
        } catch (_) {}
      }, 1500);
    };

    const sweep = () => {
      if (cancelled) return;
      const els = document.querySelectorAll("[data-reveal]");
      const vh = window.innerHeight || document.documentElement.clientHeight;
      els.forEach(el => {
        const r = el.getBoundingClientRect();
        if (r.top < vh - 40 && r.bottom > 0) reveal(el);
      });
    };

    // Mark page as JS-controlled so CSS hides initial state for animation.
    document.documentElement.classList.add("js-reveal");

    // Reveal everything in the hero immediately on mount.
    const revealHero = () => {
      const hero = document.querySelector(".hero");
      if (!hero) return;
      hero.querySelectorAll("[data-reveal]").forEach(reveal);
      const stage = document.querySelector(".hero-stage-2");
      if (stage) stage.classList.add("in");
    };

    const t0 = setTimeout(revealHero, 50);
    const t1 = setTimeout(sweep, 80);
    const t2 = setTimeout(sweep, 400);
    const t3 = setTimeout(sweep, 1200);

    // Final safety net: after 2s, just reveal everything regardless.
    const tFinal = setTimeout(() => {
      if (cancelled) return;
      document.querySelectorAll("[data-reveal]").forEach(el => {
        if (!el.classList.contains("in")) {
          el.classList.add("in");
          el.style.opacity = "1";
          el.style.transform = "none";
        }
      });
    }, 2500);

    const onScroll = () => sweep();
    window.addEventListener("scroll", onScroll, { passive: true });
    window.addEventListener("resize", onScroll);

    return () => {
      cancelled = true;
      clearTimeout(t0); clearTimeout(t1); clearTimeout(t2); clearTimeout(t3); clearTimeout(tFinal);
      window.removeEventListener("scroll", onScroll);
      window.removeEventListener("resize", onScroll);
    };
  }, []);
}

function Nav() {
  return (
    <nav className="nav">
      <div className="nav-inner">
        <a href="#top" className="nav-brand">
          <svg className="brand-mark" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-label="Sistema de Clientes">
            <path d="M 85.355 14.645 A 50 50 0 1 0 85.355 85.355 L 74.749 74.749 A 35 35 0 1 1 74.749 25.251 Z" fill="currentColor"/>
            <path d="M 68 34 C 68 28, 60 24, 50 24 C 40 24, 32 28, 32 34 C 32 40, 38 48, 50 50 C 62 52, 68 60, 68 66 C 68 72, 60 76, 50 76 C 40 76, 32 72, 32 66" fill="none" stroke="var(--accent)" strokeWidth="6" strokeLinecap="butt"/>
          </svg>
          <span className="nb-name">Sistema · CBA</span>
        </a>
        <a href="#sistema" className="nav-link">Sistema</a>
        <a href="#planes" className="nav-link">Planes</a>
        <a href="#caso" className="nav-link">Caso</a>
        <a href="#faq" className="nav-link">FAQ</a>
        <a href="https://wa.me/5493518692782?text=Hola!%20Vengo%20de%20la%20web,%20quiero%20agendar%20una%20consultor%C3%ADa%20de%20Sistema%20de%20Clientes." target="_blank" rel="noopener" className="nav-wa" aria-label="WhatsApp directo">
          <svg viewBox="0 0 24 24" fill="currentColor" width="16" height="16"><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>
        </a>
        <a href="#contacto" className="nav-cta">
          <span className="pulse"></span>
          Empezar
        </a>
      </div>
    </nav>
  );
}

function Hero() {
  const stageRef = useRef(null);
  useEffect(() => {
    if (!stageRef.current) return;
    const el = stageRef.current;
    const io = new IntersectionObserver(([e]) => {
      if (e.isIntersecting) { el.classList.add("in"); io.disconnect(); }
    }, { threshold: 0.1 });
    io.observe(el);
    // Failsafe — reveal immediately if in viewport on mount.
    const t = setTimeout(() => {
      const r = el.getBoundingClientRect();
      const vh = window.innerHeight || document.documentElement.clientHeight;
      if (r.top < vh && r.bottom > 0) { el.classList.add("in"); io.disconnect(); }
    }, 300);
    return () => { io.disconnect(); clearTimeout(t); };
  }, []);

  // Animated counter for the live "leads hoy"
  const [leadsHoy, setLeadsHoy] = useState(0);
  useEffect(() => {
    const t = setTimeout(() => {
      let n = 0;
      const id = setInterval(() => {
        n += 1;
        setLeadsHoy(n);
        if (n >= 14) clearInterval(id);
      }, 70);
      return () => clearInterval(id);
    }, 1400);
    return () => clearTimeout(t);
  }, []);

  const headlineWords = ["Convertí", "desconocidos", "en", "clientes,", "sin", "rezar."];

  return (
    <section className="hero" id="top">
      {/* Floating ambient orbs */}
      <div className="orb o1"></div>
      <div className="orb o2"></div>
      <div className="orb o3"></div>

      <div className="container">
        <div className="hero-inner hero-split">
          {/* LEFT — copy */}
          <div className="hero-copy">
            <div className="hero-badge" data-reveal="zoom">
              <span className="badge-pill">CUPOS · 3</span>
              <span><strong>3</strong> negocios este mes</span>
            </div>
            <h1 className="hero-headline-2" data-reveal="fade" data-reveal-delay="1">
              Clientes nuevos.<br/>
              <em>Todas las semanas.</em>
            </h1>
            <p className="hero-sub-2" data-reveal="up" data-reveal-delay="3">
              Sistema Meta Ads + Landing + WhatsApp para negocios de Córdoba.
              Predecible. Medible. Garantía 30d.
            </p>
            <div className="hero-actions" data-reveal="up" data-reveal-delay="4">
              <a href="#contacto" className="btn btn-primary">
                Agendar consultoría
                <span className="arrow">→</span>
              </a>
              <a href="#sistema" className="btn btn-ghost">
                Cómo funciona
              </a>
            </div>
            <div className="hero-trust">
              <span className="ht-eyebrow">Clientes activos</span>
              <div className="ht-clients">
                <a href="https://www.instagram.com/acuarioclub.cba/" target="_blank" rel="noopener" className="ht-client">
                  <span className="ht-client-av" style={{background:"linear-gradient(135deg, #4ea7d4, #1f5d8c)"}}>A</span>
                  <span className="ht-client-meta">
                    <strong>Acuario Club</strong>
                    <small>@acuarioclub.cba</small>
                  </span>
                </a>
                <a href="https://www.instagram.com/hannah.lingerie/" target="_blank" rel="noopener" className="ht-client">
                  <span className="ht-client-av" style={{background:"linear-gradient(135deg, var(--accent), var(--accent-2))"}}>H</span>
                  <span className="ht-client-meta">
                    <strong>Hannah Lingerie</strong>
                    <small>@hannah.lingerie</small>
                  </span>
                </a>
              </div>
            </div>
          </div>

          {/* RIGHT — visual stack */}
          <div className="hero-visual" ref={stageRef}>
            {/* Bento-style visual grid */}
            <div className="hv-grid">
              {/* Big — phone preview */}
              <div className="hv-phone">
                <div className="hv-phone-frame">
                  <div className="hv-phone-notch"></div>
                  <div className="hv-phone-screen">
                    <div className="hv-ig-bar">
                      <div className="hv-ig-av">H</div>
                      <div className="hv-ig-meta">
                        <strong>hannah.lingerie</strong>
                        <span>Córdoba · Patrocinado</span>
                      </div>
                      <span className="hv-ig-dots">···</span>
                    </div>
                    <div className="hv-ig-image">
                      <div className="hv-ig-overlay">
                        <div className="hv-ig-tag">2x1 EN CORPIÑOS</div>
                        <div className="hv-ig-headline">Solo este<br/>fin de semana.</div>
                      </div>
                    </div>
                    <div className="hv-ig-cta">
                      <span>Enviar mensaje</span>
                      <span className="arrow">→</span>
                    </div>
                    <div className="hv-ig-actions">
                      <span>♡</span><span>💬</span><span>↗</span>
                    </div>
                  </div>
                </div>
              </div>

              {/* Stat card — ROAS */}
              <div className="hv-stat hv-stat-roas">
                <div className="hv-stat-label">ROAS hoy</div>
                <div className="hv-stat-num">7.4<span>×</span></div>
                <svg viewBox="0 0 80 30" className="hv-stat-spark">
                  <path d="M0,25 L10,22 L20,20 L30,16 L40,15 L50,10 L60,8 L70,5 L80,3" stroke="var(--accent)" strokeWidth="2" fill="none" strokeLinecap="round" />
                </svg>
              </div>

              {/* Stat card — costo lead */}
              <div className="hv-stat hv-stat-cpl">
                <div className="hv-stat-label">Costo / lead</div>
                <div className="hv-stat-num">$840</div>
                <div className="hv-stat-trend">↓ 38% vs. mes ant.</div>
              </div>

              {/* WhatsApp chat */}
              <div className="hv-chat">
                <div className="hv-chat-head">
                  <div className="hv-chat-av">M</div>
                  <div>
                    <strong>Mariana G.</strong>
                    <span>en línea</span>
                  </div>
                  <span className="hv-chat-time">12:48</span>
                </div>
                <div className="hv-chat-body">
                  <div className="hv-bubble in">Hola! Vi el aviso, tienen turno para mañana?</div>
                  <div className="hv-bubble out">¡Hola Mariana! Sí, tengo 11:30 o 16hs ✨</div>
                  <div className="hv-bubble in">Perfecto, agendá 16hs 🙌</div>
                  <div className="hv-typing">
                    <span></span><span></span><span></span>
                  </div>
                </div>
              </div>

              {/* Live notification */}
              <div className="hv-notif">
                <div className="hv-notif-dot"></div>
                <div>
                  <strong>+1 lead</strong>
                  <span>Florencia · IG Ads · ahora</span>
                </div>
              </div>
            </div>

            {/* Ambient decorative cards */}
            <div className="hv-deco hv-deco-1">{leadsHoy} <small>leads hoy</small></div>
            <div className="hv-deco hv-deco-2">+184% <small>vs Q1</small></div>
          </div>
        </div>

        {/* Marquee strip just below hero */}
        <div className="spacer"></div>
        <div className="marquee-strip">
          <div className="marquee-strip-inner">
            {[...Array(2)].flatMap((_,k) => [
              "Hannah Lingerie", "Acuario Club", "Estética Norte",
              "Inmobiliaria CBA", "Kine + Centro", "Atelier", "Resto Patio"
            ].map((it,i) => (
              <span key={`${k}-${i}`} className="marquee-strip-item">
                {it} <span className="star">✦</span>
              </span>
            )))}
          </div>
        </div>
      </div>
    </section>
  );
}

/* SECTION: Problem — visual: empty calendar, dead phone, falling chart */
function Problem() {
  // Random bars for the descending chart
  const bars = [78, 65, 70, 55, 48, 38, 30, 22, 18, 12, 8, 5];
  return (
    <section id="problema">
      <div className="container">
        <div className="surface glow problem-2" data-reveal="zoom">
          <div className="sec-head-2">
            <span className="eyebrow red"><span className="dot"></span> 01 · El problema</span>
            <h2>Sin sistema, tu agenda es <em>una ruleta.</em></h2>
            <p>Así se ve un mes vivo de referidos. Tres síntomas que ves todos los meses.</p>
          </div>

          <div className="problem-grid">
            {/* CARD 1 — empty calendar */}
            <div className="prob-card prob-cal" data-reveal="rise" data-reveal-delay="1">
              <div className="pc-tag-row">
                <span className="pc-eyebrow red">◆ Síntoma 01</span>
                <span className="pc-stat-mini">68%</span>
              </div>
              <div className="prob-cal-grid">
                {Array.from({length: 28}).map((_, i) => {
                  const filled = [4, 12, 19, 24].includes(i);
                  return (
                    <div key={i} className={`pcd ${filled ? "fill" : ""}`}>
                      <span>{i+1}</span>
                      {filled && <span className="dot-s"></span>}
                    </div>
                  );
                })}
              </div>
              <h3>Agenda <em>vacía</em> tres semanas seguidas.</h3>
              <p>Solo 4 turnos en 28 días. El resto: esperar que alguien se acuerde.</p>
            </div>

            {/* CARD 2 — silent phone, accent */}
            <div className="prob-card prob-phone accent-bg" data-reveal="rise" data-reveal-delay="2">
              <div className="pc-tag-row">
                <span className="pc-eyebrow dark">◆ Síntoma 02</span>
                <span className="pc-stat-mini dark">3 de 5</span>
              </div>
              <div className="prob-phone-vis">
                <div className="ppv-frame">
                  <div className="ppv-time">14:32</div>
                  <div className="ppv-empty">
                    <div className="ppv-bell">🔕</div>
                    <div className="ppv-line">Sin notificaciones</div>
                    <div className="ppv-sub">hoy · esta semana · este mes</div>
                  </div>
                </div>
              </div>
              <h3>Sos <em>rehén</em> del boca en boca.</h3>
              <p>Si nadie te recomienda, el celular no suena. Te la pasás mirándolo.</p>
            </div>

            {/* CARD 3 — falling revenue chart */}
            <div className="prob-card prob-chart" data-reveal="rise" data-reveal-delay="3">
              <div className="pc-tag-row">
                <span className="pc-eyebrow red">◆ Síntoma 03</span>
                <span className="pc-stat-mini">↓ −42%</span>
              </div>
              <div className="prob-chart-vis">
                <div className="pcv-axis">
                  <span>$2M</span><span>$1M</span><span>$0</span>
                </div>
                <div className="pcv-bars">
                  {bars.map((h, i) => (
                    <div key={i} className="pcv-bar" style={{height: `${h}%`}}>
                      {i === bars.length - 1 && <span className="pcv-tip">hoy</span>}
                    </div>
                  ))}
                </div>
                <svg className="pcv-line" viewBox="0 0 240 80" preserveAspectRatio="none">
                  <path d="M0,15 L20,30 L40,28 L60,40 L80,48 L100,55 L120,63 L140,68 L160,72 L180,75 L200,77 L220,79 L240,79"
                    stroke="var(--red)" strokeWidth="2" fill="none" strokeDasharray="4 3" />
                </svg>
              </div>
              <h3>Cada mes facturás <em>menos.</em></h3>
              <p>Sin caño nuevo, los clientes viejos se desgastan. El techo se convierte en piso.</p>
            </div>
          </div>

          {/* Bottom verdict */}
          <div className="prob-verdict" data-reveal="up" data-reveal-delay="4">
            <span className="pv-x">✕</span>
            <div>
              <strong>Esto no es un negocio.</strong> Es una serie de meses buenos seguidos de meses malos, sin saber por qué.
            </div>
            <a href="#calculadora" className="pv-cta">Ver cuánto perdés <span className="arrow">↓</span></a>
          </div>
        </div>
      </div>
    </section>
  );
}

/* SECTION: Calculator (dark) — bento dashboard with live counter */
function Calculator() {
  const [ticket, setTicket] = useState(25000);
  const [lost, setLost] = useState(12);
  const total = ticket * lost;
  const yearly = total * 12;
  const fmt = (n) => "$" + n.toLocaleString("es-AR");
  const fmtK = (n) => {
    if (n >= 1000000) return "$" + (n/1000000).toFixed(1).replace(".",",") + "M";
    if (n >= 1000) return "$" + Math.round(n/1000) + "k";
    return fmt(n);
  };
  // months bars sizes
  const months = ["E","F","M","A","M","J","J","A","S","O","N","D"];

  return (
    <section id="calculadora">
      <div className="container">
        <div className="surface calc-surface" data-reveal>
          <div className="sec-head-2">
            <span className="eyebrow"><span className="dot"></span> 02 · Calculadora</span>
            <h2>La plata que <em>no estás</em> cobrando.</h2>
            <p>Movelo según tu negocio. Te lo mostramos en vivo.</p>
          </div>

          <div className="calc-bento">
            {/* MAIN — big number, dashboard-style */}
            <div className="cb-main">
              <div className="cb-head">
                <span className="cb-tag">PÉRDIDA MENSUAL · EN VIVO</span>
                <span className="cb-pulse"><span className="dot"></span> CALC</span>
              </div>
              <div className="cb-big">{fmt(total)}</div>
              <div className="cb-sub">por mes · todos los meses sin sistema</div>

              <div className="cb-yearbar">
                <div className="cb-yb-head">
                  <span>Acumulado anual</span>
                  <span className="cb-yb-val">{fmtK(yearly)}</span>
                </div>
                <div className="cb-yb-bars">
                  {months.map((m, i) => (
                    <div key={i} className="cb-yb-col">
                      <div className="cb-yb-bar" style={{height: `${20 + (i+1)*6}%`}}></div>
                      <span>{m}</span>
                    </div>
                  ))}
                </div>
              </div>
            </div>

            {/* CONTROLS */}
            <div className="cb-controls">
              <div className="cb-ctrl">
                <div className="cb-ctrl-head">
                  <span className="cb-ctrl-label">Ticket promedio</span>
                  <span className="cb-ctrl-val">{fmt(ticket)}</span>
                </div>
                <input type="range" min="5000" max="200000" step="5000" value={ticket} onChange={e => setTicket(+e.target.value)} />
                <div className="cb-ctrl-marks"><span>$5k</span><span>$200k</span></div>
              </div>

              <div className="cb-ctrl">
                <div className="cb-ctrl-head">
                  <span className="cb-ctrl-label">Clientes perdidos / mes</span>
                  <span className="cb-ctrl-val">{lost}</span>
                </div>
                <input type="range" min="1" max="50" step="1" value={lost} onChange={e => setLost(+e.target.value)} />
                <div className="cb-ctrl-marks"><span>1</span><span>50</span></div>
              </div>
            </div>

            {/* SIDE STAT 1 */}
            <div className="cb-side cb-side-a">
              <span className="cb-side-label">Por día</span>
              <span className="cb-side-val">{fmtK(Math.round(total/30))}</span>
              <span className="cb-side-meta">↓ se evapora cada 24hs</span>
            </div>

            {/* SIDE STAT 2 */}
            <div className="cb-side cb-side-b">
              <span className="cb-side-label">En 5 años</span>
              <span className="cb-side-val">{fmtK(yearly*5)}</span>
              <span className="cb-side-meta">→ una casa · un local · un auto</span>
            </div>

            {/* CTA */}
            <div className="cb-cta">
              <div>
                <div className="cb-cta-eyebrow">◆ La pregunta no es <em>si</em> perdés</div>
                <div className="cb-cta-text">Es <em>cuánto.</em> Y por cuánto tiempo más.</div>
              </div>
              <a href="#planes" className="btn btn-primary">
                Quiero parar la sangría
                <span className="arrow">→</span>
              </a>
            </div>
          </div>
        </div>
      </div>
    </section>
  );
}

window.useRevealObserver = useRevealObserver;
window.Nav = Nav;
window.Hero = Hero;
window.Problem = Problem;
window.Calculator = Calculator;
