/* 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": "regular",
  "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: "Godoy Engenharia | Engenharia elétrica em São Paulo",
    desc: "Projetos, execução, manutenção, laudos e adequações elétricas para indústrias, comércios, galpões e centros logísticos em São Paulo e interior.",
  },
  "quem-somos": {
    title: "Empresa | Godoy Engenharia",
    desc: "Empresa de engenharia elétrica em São Paulo. Projeto técnico, responsabilidade de engenharia com ART quando prevista e documentação conforme escopo para obras, expansões e cabines primárias.",
  },
  "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: "Solicitação técnica · 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ção Elétrica Industrial em São Paulo | 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: "Cabines Primárias em São Paulo | 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 Industrial em São Paulo | 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 em SP | 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: "instalacoes-eletricas",
    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: "inspecao-eletrica",
    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 São Paulo e interior.",
    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": "/",
  "servico/instalacoes-eletricas": "/instalacao-eletrica-industrial",
  "servico/cabines-primarias": "/cabines-primarias-sao-paulo",
  "servico/spda-aterramento": "/spda-industrial-sao-paulo",
  "servico/manutencao-eletrica": "/manutencao-eletrica-industrial-sp",
  "servico/retrofit": "/retrofit-eletrico-industrial",
  "servico/entrada-energia-aumento-carga": "/entrada-de-energia-aumento-de-carga",
  "servico/projetos-laudos": "/projetos-laudos-eletricos",
  "servico/inspecao-eletrica": "/inspecao-eletrica-industrial",
  "segmentos": "/segmentos",
  "obras": "/obras",
  "blog": "/blog",
  "quem-somos": "/empresa",
  "contato": "/contato",
  "politica-de-privacidade": "/politica-de-privacidade",
  // Landing pages keyword (próprio H1/SEO, conteúdo dedicado)
  "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])
);
// (Landings agora são rotas próprias — sem aliases.)
const PATH_ALIASES = {};

function pathToRoute(pathname) {
  let p = (pathname || "/").replace(/\/+$/, "");
  if (p === "") p = "/";
  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];
  return null;
}
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("servico/")) return "/" + route.slice(8);
  return "/" + route;
}

function applySeo({ title, desc, canonical, image, imageAlt }) {
  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;
  }
}

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) => {
    setRoute(next);
    const path = routeToPath(next);
    try {
      window.history.pushState({ route: next }, "", path);
    } catch (e) {
      window.location.hash = next; // fallback (e.g. file://)
    }
    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());

    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: ["São Paulo", "Grande São Paulo", "Interior de 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: sseo ? sseo.title : `${svc.title} | Godoy Engenharia`,
        desc: 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: ["São Paulo", "Grande São Paulo", "Interior de 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("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 {
      const r = ROUTE_SEO[route] || ROUTE_SEO.home;
      seo = { ...r, canonical: `${base}${routeToPath(route)}` };
    }
    applySeo(seo);
  }, [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 === "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("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 <GEHome go={go} variant={t.variant} data={data}/>;
  };

  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"],
            ["segmentos", "Segmentos"],
            ["obras", "Obras"],
            ["servico/instalacoes-eletricas", "Serviço · Instalações"],
            ["servico/entrada-energia-aumento-carga", "Serviço · Entrada / Aumento"],
            ["servico/cabines-primarias", "Serviço · Cabine primária"],
            ["servico/manutencao-eletrica", "Serviço · Manutenção"],
            ["servico/projetos-laudos", "Serviço · Projetos e laudos"],
            ["servico/spda-aterramento", "Serviço · SPDA"],
            ["servico/retrofit", "Serviço · Retrofit"],
            ["servico/inspecao-eletrica", "Serviço · Inspeção"],
            ["blog", "Blog"],
            ["blog/quando-aumentar-carga", "Blog · Post exemplo"],
            ["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/>);
