// === Section components ===

// ---- Nav + language toggle ----
function Nav({ lang, setLang, copy, onJump }) {
  return (
    <nav className="jr-nav">
      <div className="container jr-nav__inner">
        <a className="jr-nav__brand" href="#hero" onClick={(e) => {e.preventDefault();onJump("hero");}}>
          <img src="assets/logo.png" alt="Johnny Rockets" />
          <div className="jr-nav__brand-text">
            <span className="retro">México</span>
            <span className="jr-nav__brand-sub">Franquicias</span>
          </div>
        </a>
        <div className="jr-nav__links">
          <a onClick={(e) => {e.preventDefault();onJump("why");}} href="#why">{copy.navWhy}</a>
          <a onClick={(e) => {e.preventDefault();onJump("process");}} href="#process">{copy.navProcess}</a>
          <a onClick={(e) => {e.preventDefault();onJump("map");}} href="#map">{copy.navMap}</a>
          <a onClick={(e) => {e.preventDefault();onJump("contact");}} href="#contact">{copy.navContact}</a>
        </div>
        <div className="jr-nav__right">
          <div className="jr-lang">
            <button className={lang === "es" ? "is-on" : ""} onClick={() => setLang("es")}>ES</button>
            <span>·</span>
            <button className={lang === "en" ? "is-on" : ""} onClick={() => setLang("en")}>EN</button>
          </div>
          <button className="btn btn--sm" onClick={() => onJump("contact")}>{copy.ctaApply}</button>
        </div>
      </div>
    </nav>);

}

// ---- Hero ----
function Hero({ copy, onJump }) {
  return (
    <section className="jr-hero" id="hero" data-screen-label="01 Hero">
      <div className="jr-hero__bg" aria-hidden>
        {/* Marquee dots top + bottom */}
        <div className="dot-line jr-hero__dots jr-hero__dots--top" />
        {/* Boomerang decorations */}
        <svg className="jr-hero__boomerang jr-hero__boomerang--1" viewBox="0 0 200 80" aria-hidden>
          <path d="M 10 60 Q 30 5, 90 25 T 190 30" stroke="#0081C6" strokeWidth="6" fill="none" strokeLinecap="round" opacity="0.4" />
        </svg>
        <svg className="jr-hero__boomerang jr-hero__boomerang--2" viewBox="0 0 200 80" aria-hidden>
          <path d="M 10 30 Q 80 5, 140 50 T 190 30" stroke="#00BBB6" strokeWidth="6" fill="none" strokeLinecap="round" opacity="0.4" />
        </svg>
        {/* Star sparkles */}
        <div className="jr-hero__star jr-hero__star--1">✦</div>
        <div className="jr-hero__star jr-hero__star--2">✦</div>
      </div>

      <div className="container jr-hero__inner">
        <div className="jr-hero__left">
          <div className="jr-hero__eyebrow">
            <span className="tape">{copy.heroEyebrow}</span>
          </div>
          <h1 className="jr-hero__title jr-hero__title--single">
            <span className="retro jr-hero__line">
              EL SABOR ORIGINAL <span className="jr-hero__accent">AMERICANO,</span> CON EL CORAZON <span className="jr-hero__accent">MEXICANO</span>
            </span>
          </h1>
          <p className="jr-hero__sub">{copy.heroSub}</p>
          <div className="jr-hero__ctas">
            <button className="btn" onClick={() => onJump("contact")}>{copy.heroCta1}</button>
            <button className="btn btn--ghost" onClick={() => onJump("map")}>{copy.heroCta2}</button>
          </div>

          {/* Brand strip */}
          <div className="jr-hero__strip">
            <span>★</span>
            <span className="retro">Since 1986</span>
            <span>★</span>
            <span className="retro">275+ Restaurants</span>
            <span>★</span>
            <span className="retro">26 Countries</span>
            <span>★</span>
          </div>
        </div>

        <div className="jr-hero__right">
          <div className="jr-hero__plate">
            {/* Sunburst rays */}
            <svg className="jr-hero__rays" viewBox="0 0 600 600" aria-hidden>
              <defs>
                <radialGradient id="heroRayCore" cx="50%" cy="50%" r="50%">
                  <stop offset="0%" stopColor="#FFE48A" stopOpacity="1" />
                  <stop offset="60%" stopColor="#FFD24F" stopOpacity="1" />
                  <stop offset="100%" stopColor="#F0AE31" stopOpacity="1" />
                </radialGradient>
              </defs>
              {Array.from({ length: 24 }).map((_, i) => {
                const a = i / 24 * 360;
                return (
                  <polygon
                    key={i}
                    points="300,30 312,300 288,300"
                    fill={i % 2 === 0 ? "#ED184A" : "#FFD24F"}
                    transform={`rotate(${a} 300 300)`}
                    opacity={i % 2 === 0 ? 0.92 : 0.78} />);


              })}
              <circle cx="300" cy="300" r="240" fill="url(#heroRayCore)" />
              <circle cx="300" cy="300" r="240" fill="none" stroke="#1c1c20" strokeWidth="4" />
            </svg>

            {/* The food photo */}
            <img className="jr-hero__meal" src="assets/hero-meal.png" alt="Hamburguesa doble, malteada y papas Johnny Rockets" />

            {/* Marquee bulbs riding on the disc edge */}
            {Array.from({ length: 24 }).map((_, i) => {
              const angle = i / 24 * 2 * Math.PI;
              const r = 47; // %
              const x = 50 + Math.cos(angle) * r;
              const y = 50 + Math.sin(angle) * r;
              return (
                <span
                  key={i}
                  className="jr-hero__bulb"
                  style={{ left: `${x}%`, top: `${y}%`, animationDelay: `${i * 0.08}s` }} />);


            })}

            {/* Sticker badge */}
            <div className="jr-hero__plate-sticker retro">
              <span className="jr-hero__plate-sticker-top">Hand-spun</span>
              <span className="jr-hero__plate-sticker-mid script">shakes</span>
              <span className="jr-hero__plate-sticker-bottom">since '86</span>
            </div>
          </div>
        </div>
      </div>

      <div className="dot-line jr-hero__dots jr-hero__dots--bottom" />
    </section>);

}

// ---- Stats ----
function Stats({ copy }) {
  const items = [
  { num: copy.stat1Num, label: copy.stat1Label, color: "var(--jr-red)" },
  { num: copy.stat2Num, label: copy.stat2Label, color: "var(--jr-blue)" },
  { num: copy.stat3Num, label: copy.stat3Label, color: "var(--jr-yellow-deep)" },
  { num: copy.stat4Num, label: copy.stat4Label, color: "var(--jr-teal)" }];

  return (
    <section className="jr-stats" id="stats" data-screen-label="02 Stats">
      <div className="container">
        <h2 className="jr-stats__title retro">{copy.statsTitle}</h2>
        <div className="jr-stats__grid">
          {items.map((it, i) =>
          <div key={i} className="jr-stat">
              <div className="jr-stat__num retro" style={{ color: it.color }}>{it.num}</div>
              <div className="jr-stat__label">{it.label}</div>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// ---- Why franchise ----
function Why({ copy }) {
  const items = [
  { t: copy.why1Title, b: copy.why1Body, icon: "🏆", accent: "var(--jr-red)" },
  { t: copy.why2Title, b: copy.why2Body, icon: "📊", accent: "var(--jr-blue)" },
  { t: copy.why3Title, b: copy.why3Body, icon: "🤝", accent: "var(--jr-teal)" },
  { t: copy.why4Title, b: copy.why4Body, icon: "🌶️", accent: "var(--jr-yellow-deep)" }];

  return (
    <section className="jr-why" id="why" data-screen-label="03 Why">
      <div className="container">
        <header className="jr-section-head">
          <span className="tape">{copy.whyKicker}</span>
          <h2 className="jr-section-title">
            <span className="retro">{copy.whyTitle.split(" ").slice(0, -2).join(" ")}</span>
            <span className="script jr-section-title__script">{copy.whyTitle.split(" ").slice(-2).join(" ")}</span>
          </h2>
        </header>
        <div className="jr-why__grid">
          {items.map((it, i) =>
          <article key={i} className="jr-why-card" style={{ "--accent": it.accent }}>
              <div className="jr-why-card__num retro">{String(i + 1).padStart(2, "0")}</div>
              <h3 className="jr-why-card__title retro">{it.t}</h3>
              <p className="jr-why-card__body">{it.b}</p>
              <div className="jr-why-card__rule" />
            </article>
          )}
        </div>
      </div>
    </section>);

}

// ---- Brand story ----
function Story({ copy, lang }) {
  const es = lang === "es";
  return (
    <section className="jr-story" id="story" data-screen-label="04 Story">
      <div className="container">
        <div className="jr-story__grid">
          <div className="jr-story__media">
            <image-slot
              id="story-1"
              shape="rounded"
              radius="20"
              src="assets/story-1.webp"
              placeholder="Foto: interior diner / booths rojas"
              style={{ width: "100%", height: "auto", aspectRatio: "4/5", display: "block" }}>
            </image-slot>
            <div className="jr-story__sticker retro">EST. 1986</div>
          </div>
          <div className="jr-story__text">
            <span className="tape">{es ? "Nuestra historia" : "Brand Story"}</span>
            <h2 className="jr-section-title">
              <span className="retro">All-American</span>
              <span className="script jr-section-title__script">nostalgia</span>
              <span className="retro">{es ? "en cada plato." : "on every plate."}</span>
            </h2>
            {es ?
            <React.Fragment>
                <p>
                  Johnny Rockets abrió su primer restaurante el <strong>6 de junio de 1986</strong>,
                  en la icónica <strong>Melrose Avenue</strong> de Los Ángeles, California. La idea
                  era simple: recrear el diner clásico americano de los años 50. Booths rojos,
                  rocolas, malteadas batidas a mano, y servicio con una sonrisa.
                </p>
                <p>
                  Fue un éxito instantáneo. La gente hacía fila hasta las 5 de la mañana, con
                  600 a 700 comensales diarios en una sola ubicación. Hoy somos <strong>más de 275
                  restaurantes franquiciados en 26 países</strong> — desde Tokio hasta Dubai,
                  desde Santiago hasta la Ciudad de México.
                </p>
              </React.Fragment> :

            <React.Fragment>
                <p>
                  Johnny Rockets opened its first restaurant on <strong>June 6th, 1986</strong>,
                  on the iconic <strong>Melrose Avenue</strong> in Los Angeles, California. The idea
                  was simple: recreate the classic American diner of the 1950s. Red booths, jukeboxes,
                  hand-spun shakes, and service with a smile.
                </p>
                <p>
                  It was an instant hit. Crowds swarmed the Melrose location until 5am, with 600–700
                  guests daily. Today we are <strong>275+ franchised restaurants in 26 countries</strong>
                  — from Tokyo to Dubai, from Santiago to Mexico City.
                </p>
              </React.Fragment>
            }
            <div className="jr-story__quote">
              <div className="jr-story__quote-mark script">“</div>
              <p className="retro jr-story__quote-text">
                Good food, good tunes &amp; great entertainment.
              </p>
              <div className="jr-story__quote-credit">— {es ? "Promesa de marca, desde el día uno" : "Brand promise, since day one"}</div>
            </div>
          </div>
        </div>

        {/* Name origin */}
        <div className="jr-story__name">
          <div className="jr-story__name-kicker tape">{es ? "El nombre" : "The name"}</div>
          <h3 className="jr-story__name-title">
            <span className="script">“Johnny Rockets”</span>
            <span className="retro">{es ? " — puro Americana." : " — pure Americana."}</span>
          </h3>
          <div className="jr-story__name-grid">
            <div className="jr-story__name-block">
              <div className="jr-story__name-tag retro">Johnny</div>
              <p>
                {es ?
                "En honor a Johnny Appleseed, el legendario pionero estadounidense que sembró manzanos por todo el Medio Oeste — símbolo del espíritu emprendedor y la generosidad americana." :
                "After Johnny Appleseed, the legendary American pioneer who planted apple trees across the Midwest — a symbol of entrepreneurial spirit and American generosity."}
              </p>
            </div>
            <div className="jr-story__name-block">
              <div className="jr-story__name-tag retro">Rockets</div>
              <p>
                {es ?
                "Por el clásico Oldsmobile Rocket 88, el primer muscle car americano — el sonido del motor V8, los cromados brillantes y el optimismo de la posguerra de los 50." :
                "After the classic Oldsmobile Rocket 88, America's first muscle car — the V8 roar, the chrome shine, and the post-war optimism of the 1950s."}
              </p>
            </div>
          </div>
        </div>

        <div className="jr-story__pillars">
          {[
          { k: es ? "Diseño diner" : "Diner Design", v: es ? "Booths rojos, piso a cuadros, fixtures de la era atómica. Ideal 75–230 m²." : "Red booths, checkered floors, atomic-era fixtures. Ideal 75–230 m²." },
          { k: "Certified Angus Beef®", v: es ? "Hamburguesas hechas a la orden con res certificada. Vegetarianas y pollo crujiente también." : "Cooked-to-order burgers with certified beef. Veggie and crispy chicken too." },
          { k: "Hand-spun shakes", v: es ? "Malteadas y malts batidos a mano. El crew canta, baila y juega ketchup art." : "Hand-spun shakes and malts. The crew sings, dances and does ketchup art." }].
          map((p, i) =>
          <div key={i} className="jr-story-pillar">
              <div className="jr-story-pillar__k retro">{p.k}</div>
              <div className="jr-story-pillar__v">{p.v}</div>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// ---- Process ----
function Process({ copy }) {
  const steps = [
  { n: 1, t: copy.step1, b: copy.step1Body, color: "var(--jr-red)" },
  { n: 2, t: copy.step2, b: copy.step2Body, color: "var(--jr-yellow-deep)" },
  { n: 3, t: copy.step3, b: copy.step3Body, color: "var(--jr-blue)" },
  { n: 4, t: copy.step4, b: copy.step4Body, color: "var(--jr-teal)" },
  { n: 5, t: copy.step5, b: copy.step5Body, color: "var(--jr-red-deep)" }];

  return (
    <section className="jr-process" id="process" data-screen-label="05 Process">
      <div className="container">
        <header className="jr-section-head">
          <span className="tape">{copy.processKicker}</span>
          <h2 className="jr-section-title">
            <span className="script jr-section-title__script">{copy.processTitle}</span>
          </h2>
        </header>

        <div className="jr-process__rail">
          <div className="jr-process__line" />
          {steps.map((s, i) =>
          <div key={i} className="jr-process-step">
              <div className="jr-process-step__bubble retro" style={{ background: s.color }}>
                {s.n}
              </div>
              <div className="jr-process-step__title retro">{s.t}</div>
              <div className="jr-process-step__body">{s.b}</div>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// ---- Map (uses MexicoMap component) ----
function MapSection({ copy, locations, mapStyle }) {
  return (
    <section className="jr-mapsection" id="map" data-screen-label="06 Map">
      <div className="container">
        <header className="jr-section-head">
          <span className="tape">{copy.mapKicker}</span>
          <h2 className="jr-section-title">
            <span className="retro">{copy.mapTitle.split(" ").slice(0, 2).join(" ")}</span>
            <span className="script jr-section-title__script">{copy.mapTitle.split(" ").slice(2).join(" ")}</span>
          </h2>
          <p className="jr-section-sub">{copy.mapSub}</p>
        </header>
        <MexicoMap locations={locations} copy={copy} mapStyle={mapStyle} />
      </div>
    </section>);

}

// ---- Form section ----
function FormSection({ copy, states, lang }) {
  return (
    <section className="jr-formsection" id="contact" data-screen-label="07 Contact">
      <div className="container">
        <div className="jr-formsection__card">
          <div className="jr-formsection__left">
            <span className="tape">{copy.formKicker}</span>
            <h2 className="jr-section-title">
              <span className="retro">{copy.formTitle.split(" ").slice(0, 2).join(" ")}</span>
              <span className="script jr-section-title__script">{copy.formTitle.split(" ").slice(2).join(" ")}</span>
            </h2>
            <p className="jr-formsection__sub">{copy.formSub}</p>
            <div className="jr-formsection__bullets">
              <div><span className="retro">48h</span> {lang === "es" ? "respuesta inicial" : "initial response"}</div>
              <div><span className="retro">3–9</span> {lang === "es" ? "meses de apertura" : "months to open"}</div>
            </div>
          </div>
          <div className="jr-formsection__right">
            <FranchiseForm copy={copy} states={states} lang={lang} />
          </div>
        </div>
      </div>
    </section>);

}

// ---- Footer ----
function Footer({ copy }) {
  return (
    <footer className="jr-footer">
      <div className="container jr-footer__inner">
        <div className="jr-footer__brand">
          <img src="assets/logo.png" alt="Johnny Rockets" />
          <div className="script jr-footer__tag">{copy.footerTagline}</div>
        </div>
        <div className="jr-footer__cols">
          <div>
            <div className="eyebrow">{copy.footerLinks}</div>
            <a href="#why">{copy.navWhy}</a>
            <a href="#process">{copy.navProcess}</a>
            <a href="#map">{copy.navMap}</a>
            <a href="#contact">{copy.navContact}</a>
          </div>
          <div>
            <div className="eyebrow">{copy.footerContact}</div>
            <a href="mailto:franquicias@johnnyrockets.mx">franquicias@johnnyrockets.mx</a>
            <a href="tel:+525500000000">VIRKO RESTAURANTES</a>
            <div>Eduardo Molina 6730, 07460. CDMX. MEXICO</div>
          </div>
        </div>
      </div>
      <div className="dot-line dot-line--red" />
      <div className="container jr-footer__legal">{copy.footerLegal}</div>
    </footer>);

}

Object.assign(window, {
  Nav, Hero, Stats, Why, Story, Process, MapSection, FormSection, Footer
});