/* eslint-disable */
// Godoy Engenharia — main App with router + Tweaks panel + dynamic SEO

const { useState: useStateA, useEffect: useEffectA } = React;

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "variant": "a",
  "accent": "electric",
  "density": "compact",
  "displayFont": "Space Grotesk",
  "bodyFont": "Manrope"
}/*EDITMODE-END*/;

const DISPLAY_FONTS = ["Space Grotesk", "Archivo", "Sora", "Inter Tight"];
const BODY_FONTS = ["Manrope", "Sora", "DM Sans", "IBM Plex Sans"];

// SEO map — title / description per route. Service pages and posts are computed from data.
const ROUTE_SEO = {
  "home": {
    title: "Engenharia Elétrica para Empresas | Godoy Engenharia",
    desc: "Instalação elétrica, laudos, SPDA, projetos, cabine primária e entrada de energia com engenheiro eletricista responsável e equipe própria. Atendemos todo o estado de São Paulo.",
  },
  "quem-somos": {
    title: "Empresa de engenharia elétrica | Godoy Engenharia",
    desc: "Godoy Engenharia: mais de 22 anos na área elétrica, equipe própria, engenheiro eletricista responsável, CREA e ART conforme o escopo contratado.",
  },
  "informacoes": {
    title: "Informações técnicas de engenharia elétrica | Godoy Engenharia",
    desc: "Conteúdos técnicos sobre SPDA, laudos, NR-10, termografia, cabine primária, entrada de energia, projetos, QGBT, manutenção e engenharia elétrica para empresas.",
  },
  "faq": {
    title: "Perguntas frequentes sobre engenharia elétrica | Godoy Engenharia",
    desc: "Dúvidas sobre projeto elétrico, laudo, SPDA, cabine primária, entrada de energia, instalação industrial e comercial, condomínios, ART e NR-10.",
  },
  "regioes-atendidas": {
    title: "Regiões atendidas em São Paulo | Godoy Engenharia",
    desc: "Engenharia elétrica para empresas, indústrias, condomínios e comércios em todo o estado de São Paulo — capital, ABC, Barueri, Alphaville, Campinas, Sorocaba, Jundiaí e demais regiões.",
  },
  "segmentos": {
    title: "Segmentos atendidos | Godoy Engenharia",
    desc: "Engenharia elétrica para indústrias farmacêuticas, automotivas, alimentícias, químicas, galpões, centros logísticos, transportadoras, varejo, edifícios corporativos e expansões operacionais.",
  },
  "obras": {
    title: "Obras realizadas | Godoy Engenharia",
    desc: "Cases técnicos: cabines primárias, instalações elétricas industriais e comerciais, retrofit, expansão, SPDA, laudos e adequação normativa.",
  },
  "blog": {
    title: "Blog técnico | Godoy Engenharia",
    desc: "Artigos técnicos de engenharia elétrica: projeto executivo, cabines primárias, retrofit, SPDA, entrada de energia e adequação NR-10.",
  },
  "contato": {
    title: "Contato | Godoy Engenharia",
    desc: "Envie seu projeto, escopo ou necessidade técnica para a Godoy Engenharia. WhatsApp (11) 98746-4004.",
  },
  "politica-de-privacidade": {
    title: "Política de Privacidade | Godoy Engenharia",
    desc: "Como a Godoy Engenharia trata os dados informados pelo visitante ao entrar em contato pelo site, formulário, WhatsApp ou e-mail. LGPD.",
  },
};

// Keyword-rich SEO per priority service page (clean URLs).
const SERVICE_SEO = {
  "instalacoes-eletricas": {
    title: "Instalações Elétricas Industriais em SP | Godoy Engenharia",
    desc: "Instalações elétricas industriais para fábricas, galpões, centros logísticos e operações comerciais de grande porte em São Paulo.",
  },
  "cabines-primarias": {
    title: "Manutenção de Cabine Primária em SP | Godoy Engenharia",
    desc: "Projeto, instalação, manutenção e adequação de cabines primárias e sistemas de média tensão para empresas em São Paulo.",
  },
  "spda-aterramento": {
    title: "SPDA e Aterramento para Empresas | Godoy Engenharia",
    desc: "Projeto, inspeção, adequação e laudo de SPDA e aterramento para indústrias, galpões e operações corporativas.",
  },
  "manutencao-eletrica": {
    title: "Manutenção Elétrica Industrial e Comercial | Godoy Engenharia",
    desc: "Manutenção preventiva, inspeção elétrica, termografia, revisão de quadros e plano de adequação para empresas.",
  },
  "retrofit": {
    title: "Retrofit Elétrico Industrial | Godoy Engenharia",
    desc: "Modernização de instalações elétricas, atualização de quadros, reorganização de circuitos e adequação normativa para empresas.",
  },
  "entrada-energia-aumento-carga": {
    title: "Entrada de Energia e Aumento de Carga | Godoy Engenharia",
    desc: "Análise, projeto e adequação de entrada de energia para empresas que precisam ampliar carga, instalar máquinas ou expandir a operação.",
  },
  "projetos-laudos": {
    title: "Projetos e Laudos Elétricos | Godoy Engenharia",
    desc: "Projetos executivos, laudos técnicos, memoriais e documentação elétrica com responsabilidade técnica para indústrias e comércios.",
  },
  "inspecao-eletrica": {
    title: "Inspeção Elétrica e Adequação NR-10 | Godoy Engenharia",
    desc: "Inspeção elétrica, termografia, análise de quadros e adequação à NR-10 para indústrias, galpões e operações corporativas.",
  },
};

// Landing pages keyword-rich (Ads + SEO) — H1, SEO e texto próprios.
const LANDINGS = {
  "lp/galpao-sp": {
    base: "instalacao-eletrica-industrial",
    eyebrow: "INSTALAÇÃO ELÉTRICA · GALPÕES",
    crumb: "Instalação elétrica para galpões",
    h1: "Instalação elétrica para galpões em São Paulo",
    title: "Instalação Elétrica para Galpões em SP | Godoy Engenharia",
    desc: "Infraestrutura elétrica para galpões industriais, centros logísticos, transportadoras e operações comerciais de grande porte.",
    short: "Infraestrutura elétrica completa para galpões, centros logísticos, transportadoras e operações de grande porte em São Paulo: entrada de energia, quadros, alimentadores, iluminação, pontos de força, SPDA e aterramento — do projeto à entrega técnica.",
  },
  "lp/nr10": {
    base: "laudo-eletrico",
    eyebrow: "ADEQUAÇÃO NR-10",
    crumb: "Adequação NR-10 industrial",
    h1: "Adequação NR-10 industrial em São Paulo",
    title: "Adequação NR-10 Industrial em SP | Godoy Engenharia",
    desc: "Adequação à NR-10, inspeção elétrica, prontuário das instalações, laudos e plano de ação para indústrias, galpões e operações corporativas.",
    short: "Adequação à NR-10 para empresas em São Paulo: inspeção das instalações, análise de quadros, termografia, identificação de não conformidades, prontuário das instalações elétricas e plano de ação para regularização técnica.",
  },
  "lp/orcamento": {
    contact: true,
    eyebrow: "ORÇAMENTO ELÉTRICO",
    crumb: "Orçamento elétrico industrial",
    h1: "Orçamento de engenharia elétrica industrial",
    title: "Orçamento Elétrico Industrial em SP | Godoy Engenharia",
    desc: "Solicite orçamento de instalação, manutenção, cabine primária, SPDA, laudo ou retrofit elétrico para sua operação em todo o estado de São Paulo.",
    short: "Solicite um orçamento técnico de engenharia elétrica para indústrias, galpões, centros logísticos e operações comerciais. Envie sua demanda — instalação, manutenção, cabine primária, entrada de energia, SPDA, laudo ou retrofit — e a engenharia retorna com a análise inicial.",
  },
};

// ── Clean-URL routing ──────────────────────────────
// Internal route name  ↔  real pathname (no hash). Keyword-rich for SEO/Ads.
const ROUTE_TO_PATH = {
  "home": "/",
  // 7 serviços oficiais — landing pages comerciais na raiz
  "servico/projeto-eletrico": "/projeto-eletrico",
  "servico/laudo-eletrico": "/laudo-eletrico",
  "servico/spda": "/spda",
  "servico/cabine-primaria": "/cabine-primaria",
  "servico/entrada-de-energia": "/entrada-de-energia",
  "servico/instalacao-eletrica-industrial": "/instalacao-eletrica-industrial",
  "servico/instalacao-eletrica-comercial": "/instalacao-eletrica-comercial",
  // Institucionais
  "quem-somos": "/empresa",
  "obras": "/obras-realizadas",
  "informacoes": "/informacoes",
  "faq": "/faq",
  "blog": "/blog",
  "contato": "/contato",
  "regioes-atendidas": "/regioes-atendidas",
  "segmentos": "/segmentos",
  "politica-de-privacidade": "/politica-de-privacidade",
  // Landing pages keyword (Ads — H1/SEO próprio)
  "lp/galpao-sp": "/instalacao-eletrica-galpao-sp",
  "lp/nr10": "/adequacao-nr10-industrial",
  "lp/orcamento": "/orcamento-eletrico-industrial",
};
// Reverse map + aliases (extra keyword pages that resolve to an existing route).
const PATH_TO_ROUTE = Object.fromEntries(
  Object.entries(ROUTE_TO_PATH).map(([r, p]) => [p, r])
);
// Garantir que "/" sempre mapeia para "home"
PATH_TO_ROUTE["/"] = "home";
// Aliases — URLs antigas preservadas, redirecionadas para as novas rotas.
const PATH_ALIASES = {
  "/obras": "obras",
  "/cabines-primarias-sao-paulo": "servico/cabine-primaria",
  "/spda-industrial-sao-paulo": "servico/spda",
  "/entrada-de-energia-aumento-de-carga": "servico/entrada-de-energia",
  "/projetos-laudos-eletricos": "servico/projeto-eletrico",
  "/inspecao-eletrica-industrial": "servico/laudo-eletrico",
  "/manutencao-eletrica-industrial-sp": "servico/instalacao-eletrica-industrial",
  "/retrofit-eletrico-industrial": "servico/instalacao-eletrica-industrial",
};

function pathToRoute(pathname) {
  let p = pathname || "/";
  // Remove trailing slashes (exceto raiz)
  if (p !== "/") p = p.replace(/\/+$/, "");
  p = p.replace(/\/index\.html$/i, "");
  
  // Detectar se é raiz: "/" ou vazio ou termina com "/serve" (preview)
  if (p === "/" || p === "" || p.endsWith("/serve")) return "home";
  
  if (PATH_TO_ROUTE[p]) return PATH_TO_ROUTE[p];
  if (PATH_ALIASES[p]) return PATH_ALIASES[p];
  const mBlog = p.match(/^\/blog\/(.+)$/);
  if (mBlog) return "blog/" + mBlog[1];
  const mReg = p.match(/^\/regioes\/(.+)$/);
  if (mReg) return "regiao/" + mReg[1];
  // Páginas de Informações (SEO) ficam na raiz: /<slug>
  const rootSlug = p.replace(/^\//, "");
  if (rootSlug && window.GE_DATA && GE_DATA.infoPages && GE_DATA.infoPages[rootSlug]) return "info/" + rootSlug;
  // Fallback: requisição direta a um arquivo .html (ex.: preview local) → Home.
  // Em produção as URLs são limpas (sem .html), então isto nunca dispara.
  if (/\.html$/i.test(p)) return "home";
  return "404";
}
function routeToPath(route) {
  if (ROUTE_TO_PATH[route]) return ROUTE_TO_PATH[route];
  if (route.startsWith("blog/")) return "/blog/" + route.slice(5);
  if (route.startsWith("info/")) return "/" + route.slice(5);
  if (route.startsWith("regiao/")) return "/regioes/" + route.slice(7);
  if (route.startsWith("servico/")) return "/" + route.slice(8);
  return "/" + route;
}

function applySeo({ title, desc, canonical, image, imageAlt, noindex }) {
  document.title = title;
  let m = document.querySelector('meta[name="description"]');
  if (!m) { m = document.createElement("meta"); m.name = "description"; document.head.appendChild(m); }
  m.content = desc;
  // Open Graph
  const setOg = (prop, val) => {
    let og = document.querySelector(`meta[property="${prop}"]`);
    if (!og) { og = document.createElement("meta"); og.setAttribute("property", prop); document.head.appendChild(og); }
    og.content = val;
  };
  const setName = (name, val) => {
    let mt = document.querySelector(`meta[name="${name}"]`);
    if (!mt) { mt = document.createElement("meta"); mt.setAttribute("name", name); document.head.appendChild(mt); }
    mt.content = val;
  };
  setOg("og:title", title);
  setOg("og:description", desc);
  setOg("og:type", image ? "article" : "website");
  setOg("og:locale", "pt_BR");
  setOg("og:site_name", "Godoy Engenharia");
  if (canonical) setOg("og:url", canonical);
  if (image) {
    setOg("og:image", image);
    setOg("og:image:width", "1200");
    setOg("og:image:height", "675");
    if (imageAlt) setOg("og:image:alt", imageAlt);
    // Twitter
    setName("twitter:card", "summary_large_image");
    setName("twitter:title", title);
    setName("twitter:description", desc);
    setName("twitter:image", image);
    if (imageAlt) setName("twitter:image:alt", imageAlt);
  }
  // canonical
  if (canonical) {
    let link = document.querySelector('link[rel="canonical"]');
    if (!link) { link = document.createElement("link"); link.rel = "canonical"; document.head.appendChild(link); }
    link.href = canonical;
  }
  // robots: noindex apenas em páginas como a 404; demais voltam a index,follow
  let robots = document.querySelector('meta[name="robots"]');
  if (!robots) { robots = document.createElement("meta"); robots.name = "robots"; document.head.appendChild(robots); }
  robots.content = noindex ? "noindex, follow" : "index, follow";
}

function GENotFound({ go }) {
  return (
    <section className="ge-section" style={{ minHeight: "62vh", display: "flex", alignItems: "center" }}>
      <div className="ge-container" style={{ textAlign: "center", maxWidth: 680, marginInline: "auto" }}>
        <div className="ge-eyebrow" style={{ justifyContent: "center" }}>Erro 404</div>
        <div className="ge-mono" style={{ fontSize: "clamp(56px, 12vw, 104px)", color: "var(--ge-green)", lineHeight: 1, margin: "14px 0 8px" }}>404</div>
        <h1 style={{ marginTop: 8 }}>Página não encontrada</h1>
        <p style={{ color: "var(--ge-ink-soft, var(--ge-ink))", marginTop: 14, fontSize: 18 }}>
          O endereço acessado não existe ou foi movido. Verifique o link ou volte para a página inicial.
        </p>
        <div style={{ display: "flex", gap: 12, justifyContent: "center", flexWrap: "wrap", marginTop: 28 }}>
          <button className="ge-btn ge-btn--primary" onClick={() => go("home")}>Voltar ao início</button>
          <button className="ge-btn ge-btn--ghost" onClick={() => go("servico/instalacao-eletrica-industrial")}>Ver serviços</button>
          <button className="ge-btn ge-btn--ghost" onClick={() => go("contato")}>Falar com engenharia</button>
        </div>
      </div>
    </section>
  );
}

function GEApp() {
  const data = window.GE_DATA;
  const [route, setRoute] = useStateA(() => {
    // 1) Prefer clean pathname. 2) Fall back to legacy hash. 3) home.
    const fromPath = pathToRoute(window.location.pathname);
    if (fromPath) return fromPath;
    const hash = window.location.hash.replace(/^#/, "");
    return hash || "home";
  });
  const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [toast, setToast] = useStateA("");

  const go = (next) => {
    // Suporta âncora opcional, ex.: "contato#formulario"
    let anchor = null;
    const hashIdx = next.indexOf("#");
    if (hashIdx >= 0) { anchor = next.slice(hashIdx + 1); next = next.slice(0, hashIdx); }
    setRoute(next);
    const path = routeToPath(next) + (anchor ? "#" + anchor : "");
    try {
      window.history.pushState({ route: next }, "", path);
    } catch (e) {
      window.location.hash = next; // fallback (e.g. file://)
    }
    if (anchor) {
      // aguarda render da nova rota e rola até a âncora (offset do header fixo)
      let tries = 0;
      const tryScroll = () => {
        const el = document.getElementById(anchor);
        if (el) {
          window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 88, behavior: "smooth" });
        } else if (tries++ < 10) {
          setTimeout(tryScroll, 50);
        }
      };
      setTimeout(tryScroll, 60);
    } else {
      window.scrollTo({ top: 0 });
      document.querySelector(".ge-app-scroll")?.scrollTo({ top: 0 });
    }
  };

  useEffectA(() => {
    // Back/forward navigation with real URLs
    const onPop = () => {
      const fromPath = pathToRoute(window.location.pathname);
      const hash = window.location.hash.replace(/^#/, "");
      setRoute(fromPath || hash || "home");
    };
    window.addEventListener("popstate", onPop);
    // Legacy hash support (old links / bookmarks)
    const onHash = () => {
      const hash = window.location.hash.replace(/^#/, "");
      if (hash) setRoute(hash);
    };
    window.addEventListener("hashchange", onHash);
    // If the page loaded on a legacy #hash, normalize to a clean URL.
    const initialHash = window.location.hash.replace(/^#/, "");
    if (initialHash && !pathToRoute(window.location.pathname)) {
      try { window.history.replaceState({ route: initialHash }, "", routeToPath(initialHash)); } catch (e) {}
    }
    return () => {
      window.removeEventListener("popstate", onPop);
      window.removeEventListener("hashchange", onHash);
    };
  }, []);

  // SEO meta updates per route
  useEffectA(() => {
    const base = `https://${data.brand.domain}`;
    let seo;
    // Remove any per-page Service schema injected by previous render
    document.querySelectorAll('script[data-ld="service-page"]').forEach((n) => n.remove());
    document.querySelectorAll('script[data-ld="faq-page"]').forEach((n) => n.remove());
    document.querySelectorAll('script[data-ld="article-page"]').forEach((n) => n.remove());
    document.querySelectorAll('script[data-ld="breadcrumb"]').forEach((n) => n.remove());

    if (route.startsWith("lp/")) {
      // Landing pages keyword — SEO próprio + Service JSON-LD (quando baseado em serviço)
      const lp = LANDINGS[route];
      const cleanUrl = `${base}${routeToPath(route)}`;
      seo = lp ? { title: lp.title, desc: lp.desc, canonical: cleanUrl } : ROUTE_SEO.home;
      if (lp && lp.base) {
        const svc = data.services.find((s) => s.slug === lp.base);
        if (svc) {
          const ld = document.createElement("script");
          ld.type = "application/ld+json";
          ld.setAttribute("data-ld", "service-page");
          ld.text = JSON.stringify({
            "@context": "https://schema.org",
            "@type": "Service",
            "@id": `${cleanUrl}#service`,
            name: lp.h1,
            description: lp.desc,
            serviceType: svc.title,
            provider: { "@id": `${base}/#org` },
            areaServed: { "@type": "State", name: "São Paulo" },
            url: cleanUrl,
            category: "Engenharia elétrica",
          });
          document.head.appendChild(ld);
        }
      }
    } else if (route.startsWith("servico/")) {
      const slug = route.slice(8);
      const svc = data.services.find((s) => s.slug === slug);
      const cleanUrl = `${base}${routeToPath(route)}`;
      // Keyword-rich title/description per priority service page
      const sseo = SERVICE_SEO[slug];
      seo = svc ? {
        title: svc.metaTitle || (sseo ? sseo.title : `${svc.title} | Godoy Engenharia`),
        desc: svc.metaDesc || (sseo ? sseo.desc : (svc.lede || "").slice(0, 158)),
        canonical: cleanUrl,
      } : ROUTE_SEO.home;

      // Inject Service JSON-LD for the current service
      if (svc) {
        const ld = document.createElement("script");
        ld.type = "application/ld+json";
        ld.setAttribute("data-ld", "service-page");
        ld.text = JSON.stringify({
          "@context": "https://schema.org",
          "@type": "Service",
          "@id": `${cleanUrl}#service`,
          name: svc.title,
          description: svc.lede,
          serviceType: svc.title,
          provider: { "@id": `${base}/#org` },
          areaServed: { "@type": "State", name: "São Paulo" },
          url: cleanUrl,
          category: "Engenharia elétrica",
          hasOfferCatalog: {
            "@type": "OfferCatalog",
            name: svc.title,
            itemListElement: (svc.bullets || []).map((b, i) => ({
              "@type": "Offer",
              position: i + 1,
              itemOffered: { "@type": "Service", name: b }
            }))
          }
        });
        document.head.appendChild(ld);
      }
    } else if (route.startsWith("info/")) {
      const slug = route.slice(5);
      const ip = (data.infoPages && data.infoPages[slug]) || null;
      const cleanUrl = `${base}/${slug}`;
      seo = ip ? {
        title: ip.metaTitle || `${ip.h1} | Godoy Engenharia`,
        desc: ip.metaDesc || "",
        canonical: cleanUrl,
        image: ip.photo ? `${base}/img/hero/${ip.photo}.webp` : undefined,
        imageAlt: ip.imgAlt,
      } : { ...ROUTE_SEO.informacoes, canonical: `${base}/informacoes`, noindex: true };
    } else if (route.startsWith("regiao/")) {
      seo = { ...(ROUTE_SEO["regioes-atendidas"]), canonical: `${base}${routeToPath(route)}` };
    } else if (route.startsWith("blog/")) {
      const slug = route.slice(5);
      const post = data.posts.find((p) => p.slug === slug);
      const bc = (window.GE_BLOG && window.GE_BLOG[slug]) || null;
      seo = post ? {
        title: (bc && bc.seoTitle) || `${post.title} | Blog | Godoy Engenharia`,
        desc: (bc && bc.metaDescription) || post.excerpt.slice(0, 158),
        canonical: `${base}/blog/${slug}`,
        image: post.img ? `${base}/img/hero/${post.img}.webp` : undefined,
        imageAlt: post.imgAlt,
      } : ROUTE_SEO.blog;
    } else if (route === "404") {
      seo = {
        title: "Página não encontrada | Godoy Engenharia",
        desc: "A página acessada não foi encontrada. Conheça os serviços de engenharia elétrica da Godoy Engenharia ou volte à página inicial.",
        canonical: `${base}/`,
        noindex: true,
      };
    } else {
      const r = ROUTE_SEO[route] || ROUTE_SEO.home;
      seo = { ...r, canonical: `${base}${routeToPath(route)}` };
    }
    applySeo(seo);

    // FAQPage JSON-LD — apenas quando a FAQ está visível na página (sem schema oculto)
    try {
      let faqItems = null;
      if (route === "faq") {
        faqItems = (data.faqGeneral || []).flatMap((g) => g.items || []);
      } else if (route.startsWith("servico/")) {
        const svc = data.services.find((s) => s.slug === route.slice(8));
        faqItems = svc && svc.faq;
      } else if (route.startsWith("lp/") && LANDINGS[route] && LANDINGS[route].base) {
        const svc = data.services.find((s) => s.slug === LANDINGS[route].base);
        faqItems = svc && svc.faq;
      } else if (route.startsWith("info/")) {
        const ip = data.infoPages && data.infoPages[route.slice(5)];
        faqItems = ip && ip.faq;
      }
      if (faqItems && faqItems.length) {
        const ld = document.createElement("script");
        ld.type = "application/ld+json";
        ld.setAttribute("data-ld", "faq-page");
        ld.text = JSON.stringify({
          "@context": "https://schema.org",
          "@type": "FAQPage",
          mainEntity: faqItems.slice(0, 20).map((f) => ({
            "@type": "Question",
            name: f.q,
            acceptedAnswer: { "@type": "Answer", text: f.a }
          }))
        });
        document.head.appendChild(ld);
      }
    } catch (e) {}

    // Article / BlogPosting + BreadcrumbList JSON-LD
    try {
      const ORG = { "@type": "Organization", name: "Godoy Engenharia", url: base + "/" };
      const addLd = (kind, obj) => {
        const ld = document.createElement("script");
        ld.type = "application/ld+json";
        ld.setAttribute("data-ld", kind);
        ld.text = JSON.stringify(obj);
        document.head.appendChild(ld);
      };
      const parseDate = (s) => {
        if (!s) return undefined;
        const m = { jan: "01", fev: "02", mar: "03", abr: "04", mai: "05", jun: "06", jul: "07", ago: "08", set: "09", out: "10", nov: "11", dez: "12", feb: "02", apr: "04", may: "05", aug: "08", sep: "09", oct: "10", dec: "12" };
        const p = String(s).toLowerCase().split(/\s+/);
        if (p.length === 3 && m[p[1].slice(0, 3)]) return `${p[2]}-${m[p[1].slice(0, 3)]}-${p[0].padStart(2, "0")}`;
        return undefined;
      };
      const crumbs = (items) => ({
        "@context": "https://schema.org", "@type": "BreadcrumbList",
        itemListElement: items.map((it, i) => ({ "@type": "ListItem", position: i + 1, name: it.name, item: base + it.path }))
      });

      if (route.startsWith("blog/")) {
        const post = data.posts.find((p) => p.slug === route.slice(5));
        if (post) {
          const dt = parseDate(post.date);
          addLd("article-page", {
            "@context": "https://schema.org", "@type": "BlogPosting",
            headline: post.title,
            description: post.excerpt,
            image: post.img ? `${base}/img/hero/${post.img}.webp` : undefined,
            datePublished: dt, dateModified: dt,
            author: ORG, publisher: ORG,
            mainEntityOfPage: { "@type": "WebPage", "@id": `${base}/blog/${post.slug}` }
          });
          addLd("breadcrumb", crumbs([
            { name: "Início", path: "/" }, { name: "Blog", path: "/blog" }, { name: post.title, path: "/blog/" + post.slug }
          ]));
        }
      } else if (route.startsWith("info/")) {
        const ip = data.infoPages && data.infoPages[route.slice(5)];
        if (ip) {
          addLd("article-page", {
            "@context": "https://schema.org", "@type": "Article",
            headline: ip.h1 || ip.title,
            description: ip.md || ip.lead,
            image: ip.photo ? `${base}/img/hero/${ip.photo}.webp` : undefined,
            author: ORG, publisher: ORG,
            mainEntityOfPage: { "@type": "WebPage", "@id": `${base}/${route.slice(5)}` }
          });
          addLd("breadcrumb", crumbs([
            { name: "Início", path: "/" }, { name: "Informações", path: "/informacoes" }, { name: ip.h1 || ip.title, path: "/" + route.slice(5) }
          ]));
        }
      } else if (route.startsWith("servico/")) {
        const svc = data.services.find((s) => s.slug === route.slice(8));
        if (svc) addLd("breadcrumb", crumbs([
          { name: "Início", path: "/" }, { name: "Serviços", path: "/#servicos" }, { name: svc.title, path: "/" + svc.slug }
        ]));
      }
    } catch (e) {}
  }, [route]);

  // One-time: organization JSON-LD + Google Fonts pre-load (for tweakable fonts)
  useEffectA(() => {
    // Global click tracker — dataLayer events for data-ge-cta tagged elements
    const onClick = (e) => {
      const el = e.target.closest("[data-ge-cta]");
      if (!el) return;
      const kind = el.getAttribute("data-ge-cta");
      const loc = el.getAttribute("data-ge-loc") || "";
      const map = {
        primary:        "click_cta_primary",
        secondary:      "click_cta_secondary",
        whatsapp:       "click_whatsapp",
        email:          "click_email",
        linkedin:       "click_linkedin",
        instagram:      "click_instagram",
        cases:          "click_cases",
        menu_services:  "click_menu_services",
        menu_contact:   "click_menu_contact",
      };
      const evt = map[kind] || "click_cta";
      try {
        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
          event: evt,
          location: loc,
          button_text: (el.textContent || "").trim().slice(0, 60),
          page_url: location.href,
          page_title: document.title,
        });
      } catch (err) {}
      // Google Ads conversions — WhatsApp e E-mail (form_submit é disparado no envio do formulário)
      try {
        if (typeof window.gtag === "function") {
          if (kind === "whatsapp") {
            window.gtag("event", "conversion", { send_to: "AW-736387313/0Cy1CIDcpbUcEPHBkd8C" });
          } else if (kind === "email" || kind === "secondary") {
            window.gtag("event", "conversion", { send_to: "AW-736387313/PGcwCIbcpbUcEPHBkd8C" });
          }
        }
      } catch (err) {}
    };
    document.addEventListener("click", onClick, true);

    const all = new Set([...DISPLAY_FONTS, ...BODY_FONTS]);
    const families = Array.from(all).map((f) => f.replace(/ /g, "+") + ":wght@400;500;600;700").join("&family=");
    if (!document.getElementById("ge-tweak-fonts")) {
      const link = document.createElement("link");
      link.id = "ge-tweak-fonts";
      link.rel = "stylesheet";
      link.href = `https://fonts.googleapis.com/css2?family=${families}&display=swap`;
      document.head.appendChild(link);
    }

    // JSON-LD base (Organization + LocalBusiness + WebSite + sameAs) já está
    // no <head> do index.html. Não injetamos LocalBusiness duplicado aqui para
    // evitar conflito de @id e sameAs vazio. Apenas o Service por página é
    // adicionado dinamicamente (ver efeito de SEO acima).
  }, []);

  const renderRoute = () => {
    if (route === "home") return <GEHome go={go} variant={t.variant} data={data}/>;
    if (route === "quem-somos") return <GEQuemSomos go={go} data={data}/>;
    if (route === "segmentos") return <GESegmentos go={go} data={data}/>;
    if (route === "obras") return <GEObras go={go} data={data}/>;
    if (route === "informacoes") return <GEInformacoes go={go} data={data}/>;
    if (route === "faq") return <GEFAQ go={go} data={data}/>;
    if (route === "regioes-atendidas") return <GERegioes go={go} data={data}/>;
    if (route === "blog") return <GEBlog go={go} data={data}/>;
    if (route === "contato") return <GEContato go={go} data={data} onSent={() => { setToast("Solicitação enviada com sucesso. A equipe da Godoy Engenharia retornará para alinhamento técnico."); go("home"); }}/>;
    if (route === "politica-de-privacidade") return <GEPolitica go={go} data={data}/>;
    if (route.startsWith("blog/")) return <GEPost slug={route.slice(5)} go={go} data={data}/>;
    if (route.startsWith("info/")) return <GEInfoPage slug={route.slice(5)} go={go} data={data}/>;
    if (route.startsWith("regiao/")) return <GERegiaoPage slug={route.slice(7)} go={go} data={data}/>;
    if (route.startsWith("servico/")) return <GEServicePage slug={route.slice(8)} go={go} data={data}/>;
    if (route.startsWith("lp/")) {
      const lp = LANDINGS[route];
      if (lp && lp.contact) return <GEContato go={go} data={data} lp={lp} onSent={() => { setToast("Solicitação enviada com sucesso. A equipe da Godoy Engenharia retornará para alinhamento técnico."); go("home"); }}/>;
      if (lp) return <GEServicePage slug={lp.base} go={go} data={data} lp={lp}/>;
    }
    return <GENotFound go={go}/>;
  };

  return (
    <div
      data-variant={t.variant}
      data-accent={t.accent}
      data-density={t.density}
      className="ge-app-scroll"
      style={{
        ["--ge-display"]: `"${t.displayFont}", system-ui, sans-serif`,
        ["--ge-body"]: `"${t.bodyFont}", system-ui, sans-serif`,
        background: "var(--ge-paper)",
        minHeight: "100vh",
      }}
    >
      <GENav route={route} go={go} services={data.services} brand={data.brand}/>
      {renderRoute()}
      <GEFooter go={go} services={data.services} brand={data.brand}/>
      <GEWhatsApp brand={data.brand}/>
      <GEToast message={toast} onDone={() => setToast("")}/>

      <TweaksPanel title="Godoy · Tweaks">
        <TweakSection label="Direção visual"/>
        <TweakRadio
          label="Variação"
          value={t.variant}
          options={[
            { value: "a", label: "A · Técnica" },
            { value: "b", label: "B · Editorial" },
          ]}
          onChange={(v) => setTweak("variant", v)}
        />
        <TweakSelect
          label="Cor de destaque"
          value={t.accent}
          options={[
            { value: "electric", label: "Verde Godoy (padrão)" },
            { value: "copper",   label: "Cobre" },
            { value: "cobalt",   label: "Cobalto" },
            { value: "graphite", label: "Grafite" },
          ]}
          onChange={(v) => setTweak("accent", v)}
        />
        <TweakRadio
          label="Densidade"
          value={t.density}
          options={["compact", "regular", "comfy"]}
          onChange={(v) => setTweak("density", v)}
        />
        <TweakSection label="Tipografia"/>
        <TweakSelect
          label="Display"
          value={t.displayFont}
          options={DISPLAY_FONTS}
          onChange={(v) => setTweak("displayFont", v)}
        />
        <TweakSelect
          label="Corpo"
          value={t.bodyFont}
          options={BODY_FONTS}
          onChange={(v) => setTweak("bodyFont", v)}
        />
        <TweakSection label="Navegação rápida"/>
        <div style={{ display: "flex", flexDirection: "column", gap: 6, maxHeight: 280, overflowY: "auto" }}>
          {[
            ["home", "Home"],
            ["quem-somos", "Empresa"],
            ["informacoes", "Informações"],
            ["faq", "FAQ"],
            ["obras", "Obras realizadas"],
            ["regioes-atendidas", "Regiões atendidas"],
            ["servico/projeto-eletrico", "Serviço · Projeto elétrico"],
            ["servico/laudo-eletrico", "Serviço · Laudo elétrico"],
            ["servico/spda", "Serviço · SPDA"],
            ["servico/cabine-primaria", "Serviço · Cabine primária"],
            ["servico/entrada-de-energia", "Serviço · Entrada de energia"],
            ["servico/instalacao-eletrica-industrial", "Serviço · Instalação industrial"],
            ["servico/instalacao-eletrica-comercial", "Serviço · Instalação comercial"],
            ["info/o-que-e-laudo-eletrico", "Info · O que é laudo elétrico"],
            ["info/spda-e-para-raios", "Info · SPDA e para-raios"],
            ["blog", "Blog"],
            ["contato", "Contato"],
          ].map(([r, label]) => (
            <button key={r}
              onClick={() => go(r)}
              style={{
                background: route === r ? "#161c19" : "transparent",
                color: route === r ? "#fff" : "#d8d5c8",
                border: "1px solid " + (route === r ? "#161c19" : "rgba(255,255,255,0.12)"),
                padding: "6px 10px", fontSize: 12, borderRadius: 3, cursor: "pointer",
                textAlign: "left", fontFamily: "var(--ge-display)",
              }}
            >{label}</button>
          ))}
        </div>
      </TweaksPanel>
    </div>
  );
}

ReactDOM.createRoot(document.getElementById("root")).render(<GEApp/>);
