import { createFileRoute, Link } from "@tanstack/react-router";
import { useEffect, useState } from "react";
import { toast } from "sonner";
import { supabase } from "@/integrations/supabase/client";
import logo from "@/assets/logo-ponto.png";
import { niches } from "@/lib/niches";
import { captureUtmFromUrl, getStoredUtm, trackEvent } from "@/lib/tracking";
import { buildWhatsAppHref, loadWhatsAppSettings, type WhatsAppSettings } from "@/lib/whatsapp";

const HOME_NICHE = "Home";

export const Route = createFileRoute("/")({
  component: Index,
  head: () => ({
    meta: [
      { title: ".PONTO — Sua empresa no digital | Tráfego pago" },
      {
        name: "description",
        content:
          "Agência de tráfego pago especializada em climatização, restaurantes, telefonia, estética e marketing digital. Mais leads, mais vendas, menos achismo.",
      },
    ],
  }),
});

const cards = [
  {
    ...niches.climatizacao,
    tagline: "Orçamentos qualificados para HVAC, PMOC e refrigeração.",
  },
  {
    ...niches.restaurantes,
    tagline: "Mesas cheias e delivery próprio para o seu restaurante.",
  },
  {
    ...niches.telefonia,
    tagline: "Volume de venda de aparelhos, planos e acessórios.",
  },
  {
    ...niches.estetica,
    tagline: "Agenda cheia de pacientes qualificados para sua clínica.",
  },
  {
    ...niches.marketing,
    tagline: "Gestão completa de redes sociais, branding e conteúdo.",
  },
  {
    ...niches.processoComercial,
    tagline: "Consultoria de processo comercial para escalar vendas.",
  },
];

const beneficios = [
  {
    icon: "📈",
    title: "Mais reconhecimento na sua cidade",
    desc: "Equipe especializada em estratégias de marketing digital e gestão de mídias sociais para colocar sua marca no mapa.",
  },
  {
    icon: "🏰",
    title: "Marca mais forte",
    desc: "Sua marca presente de forma consistente nas mídias sociais, criando uma imagem forte e reconhecível.",
  },
  {
    icon: "📊",
    title: "Menos trabalho para você",
    desc: "Análises detalhadas de desempenho para tomar decisões certas e replicar o que dá certo.",
  },
  {
    icon: "💼",
    title: "Profissionalismo nas redes",
    desc: "Acompanhamos as trends e oferecemos ideias novas e criativas para engajar sua audiência.",
  },
];

const faqHome = [
  {
    q: "O que é o método de trabalho da .PONTO?",
    a: "Nosso método é um funil de marketing digital de 4 etapas: Atração (trazer pessoas certas), Atenção (conquistar interesse), Fechamento (transformar em cliente) e Retenção (fazer comprar de novo). Cada etapa é otimizada para tráfego pago de performance.",
  },
  {
    q: "Como funciona o tráfego pago na prática?",
    a: "Criamos campanhas no Google Ads, Meta Ads e outras plataformas direcionadas ao seu público ideal. Cada real investido é rastreado até a venda, com relatórios semanais claros de CPL, ROI e fechamento.",
  },
  {
    q: "Em quanto tempo vejo resultados?",
    a: "Na maioria dos casos, os primeiros leads qualificados começam a chegar em até 72 horas após o início das campanhas. Resultados consistentes de crescimento costumam aparecer entre 30 e 60 dias.",
  },
  {
    q: "Quanto preciso investir em mídia?",
    a: "Recomendamos um investimento mínimo de R$ 2.000 a R$ 3.000 por mês em mídia, dependendo do nicho e da região. Esse valor é separado da taxa de gestão e é 100% direcionado aos anúncios.",
  },
  {
    q: "O que é a etapa de Atração?",
    a: "É a primeira fase do funil. Usamos Google Ads, Meta Ads e outras fontes de tráfego para levar pessoas realmente interessadas até seus canais de venda — site, landing page ou WhatsApp.",
  },
  {
    q: "O que é a etapa de Atenção?",
    a: "Depois de atrair, precisamos conquistar o interesse. Criamos copy persuasiva, criativos de impacto e páginas otimizadas para que o visitante entenda o valor da sua oferta e queira saber mais.",
  },
  {
    q: "Como funciona o Fechamento?",
    a: "Consolidamos sua equipe de vendas com scripts comerciais, automações de WhatsApp e qualificação de leads. O objetivo é transformar quem demonstrou interesse em cliente pagante de forma previsível.",
  },
  {
    q: "Por que a Retenção é importante?",
    a: "Vender uma vez é bom, mas vender de novo é o que escala o negócio. Trabalhamos estratégias de remarketing, recorrência e fidelização para aumentar o LTV (Lifetime Value) de cada cliente.",
  },
  {
    q: "Funciona para qualquer segmento?",
    a: "Sim, nosso método é adaptável. Já atuamos com climatização, restaurantes, telefonia, estética, marketing e processos comerciais. Customizamos cada etapa para a realidade do seu negócio.",
  },
  {
    q: "Tem contrato de fidelidade?",
    a: "Não. Trabalhamos com contrato mensal, sem multa de cancelamento. Você fica pelo resultado e pela confiança, não por obrigação contratual.",
  },
];

const metodo = [
  {
    icon: "🧲",
    title: "ATRAÇÃO",
    desc: "A primeira etapa do processo de Marketing Digital. Atrair pessoas para seus canais de vendas é indispensável para gerar novas vendas, usando as principais fontes de tráfego.",
  },
  {
    icon: "⚠️",
    title: "ATENÇÃO",
    desc: "Após atrair as pessoas até seus canais, você precisa fazer com que elas se interessem pelo que você tem a oferecer. Conquistar a atenção é o próximo caminho para gerar vendas.",
  },
  {
    icon: "🏷️",
    title: "FECHAMENTO",
    desc: "Com a atenção da audiência, o próximo passo é transformá-la em clientes. Consolidamos sua equipe de vendas e criamos scripts comerciais que convertem.",
  },
  {
    icon: "❤️",
    title: "RETENÇÃO",
    desc: "Após a conversão, começa a jornada para fazer este cliente comprar novamente, ampliando seu LTV. Reter é tão importante quanto fechar novas vendas.",
  },
];

function Index() {
  const [leadInfo, setLeadInfo] = useState({ nome: "", cidade: "" });
  const [waSettings, setWaSettings] = useState<WhatsAppSettings | null>(null);

  useEffect(() => {
    captureUtmFromUrl();
    loadWhatsAppSettings().then(setWaSettings);
  }, []);

  return (
    <div className="min-h-screen bg-background text-foreground">
      <nav className="flex items-center justify-between px-6 py-6 md:px-12">
        <img src={logo} alt=".PONTO" className="h-10 w-auto" />
        <div className="flex items-center gap-3">
          <a
            href="#contato"
            className="hidden rounded-full border border-border bg-card px-5 py-2 text-sm font-semibold text-foreground sm:inline-flex"
          >
            Falar com especialista
          </a>
          <a
            href="#nichos"
            className="rounded-full bg-[#3DFF8A] px-5 py-2 text-sm font-bold text-black"
          >
            Ver nichos ↓
          </a>
        </div>
      </nav>

      <header className="relative overflow-hidden px-6 py-24 md:py-36">
        <div className="pointer-events-none absolute inset-0">
          <div className="absolute -top-40 left-1/2 h-[600px] w-[600px] -translate-x-1/2 rounded-full bg-primary/30 blur-3xl" />
        </div>
        <div className="relative mx-auto max-w-4xl text-center">
          <span className="inline-flex rounded-full border border-border bg-card px-4 py-1.5 text-xs font-bold uppercase tracking-widest text-muted-foreground">
            Agência de tráfego pago de performance
          </span>
          <h1 className="mt-6 font-display text-5xl font-black uppercase leading-[1.05] md:text-7xl">
            Sua empresa no{" "}
            <span className="bg-gradient-to-r from-primary to-[#3DFF8A] bg-clip-text text-transparent">
              digital
            </span>
            ,<br /> no <span className="text-[#3DFF8A]">.PONTO</span> certo.
          </h1>
          <p className="mx-auto mt-6 max-w-2xl text-lg text-muted-foreground">
            Mais leads, mais vendas, menos achismo. Especialistas em
            climatização, restaurantes, telefonia, estética e marketing digital.
          </p>
        </div>
      </header>

      <section id="nichos" className="mx-auto max-w-6xl px-6 pb-24">
        <div className="mb-12 text-center">
          <span className="text-xs font-bold uppercase tracking-[0.3em] text-[#3DFF8A]">
            Escolha seu nicho
          </span>
          <h2 className="mt-3 text-3xl font-black uppercase md:text-4xl">
            Landing pages especialistas
          </h2>
        </div>
        <div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
          {cards.map((c) => (
            <Link
              key={c.slug}
              to={`/${c.slug}` as "/climatizacao"}
              className="group relative overflow-hidden rounded-3xl border border-border bg-card transition-all hover:-translate-y-1 hover:border-primary"
            >
              <div className="relative aspect-[16/10] overflow-hidden">
                {c.heroImage ? (
                  <img
                    src={c.heroImage}
                    alt={c.niche}
                    loading="lazy"
                    className="h-full w-full object-cover transition-transform duration-500 group-hover:scale-105"
                  />
                ) : (
                  <div
                    className="h-full w-full"
                    style={{
                      background: `linear-gradient(135deg, ${c.gradientFrom}, ${c.gradientTo})`,
                    }}
                  />
                )}
                <div className="absolute inset-0 bg-gradient-to-t from-card via-card/30 to-transparent" />
              </div>
              <div className="p-6">
                <h3 className="text-xl font-black uppercase">{c.niche}</h3>
                <p className="mt-2 text-sm text-muted-foreground">{c.tagline}</p>
                <div className="mt-5 inline-flex items-center gap-2 text-sm font-bold text-[#3DFF8A]">
                  Ver landing page →
                </div>
              </div>
            </Link>
          ))}
        </div>
      </section>

      {/* O que você ganha */}
      <section className="bg-[#3a0a6b] py-20">
        <div className="mx-auto max-w-6xl px-6">
          <h2 className="text-center font-display text-3xl font-black uppercase text-white md:text-5xl">
            O que você ganha ao contratar nossos serviços
          </h2>
          <div className="mt-14 grid gap-6 md:grid-cols-2 lg:grid-cols-4">
            {beneficios.map((b) => (
              <div
                key={b.title}
                className="rounded-3xl border-2 border-[#3DFF8A] bg-[#3a0a6b] p-7 text-center transition-transform hover:-translate-y-1"
              >
                <div className="text-4xl">{b.icon}</div>
                <h3 className="mt-4 font-display text-2xl font-black uppercase leading-tight text-white">
                  {b.title}
                </h3>
                <p className="mt-4 text-sm leading-relaxed text-white/80">
                  {b.desc}
                </p>
              </div>
            ))}
          </div>
        </div>
      </section>

      {/* Nosso método de trabalho */}
      <section className="bg-background py-20">
        <div className="mx-auto max-w-6xl px-6">
          <div className="text-center">
            <span className="text-xs font-bold uppercase tracking-[0.3em] text-[#3DFF8A]">
              Nosso método de trabalho
            </span>
            <h2 className="mt-3 font-display text-3xl font-black uppercase md:text-5xl">
              Conteúdo adaptado às{" "}
              <span className="text-[#3DFF8A]">diferentes plataformas</span>
            </h2>
          </div>
          <div className="mt-14 grid gap-8 md:grid-cols-2 lg:grid-cols-4">
            {metodo.map((m, i) => (
              <div key={m.title} className="text-center">
                <div className="mx-auto flex h-16 w-16 items-center justify-center rounded-2xl bg-[#3DFF8A]/10 text-3xl">
                  {m.icon}
                </div>
                <div className="mt-4 text-xs font-bold text-[#3DFF8A]">
                  Etapa 0{i + 1}
                </div>
                <h3 className="mt-2 font-display text-3xl font-black uppercase text-foreground">
                  {m.title}
                </h3>
                <p className="mt-3 text-sm leading-relaxed text-muted-foreground">
                  {m.desc}
                </p>
              </div>
            ))}
          </div>
        </div>
      </section>

      {/* FAQ — Nosso método de trabalho e tráfego pago */}
      <section className="bg-[#3a0a6b] py-20">
        <div className="mx-auto max-w-4xl px-6">
          <div className="text-center">
            <span className="text-xs font-bold uppercase tracking-[0.3em] text-[#3DFF8A]">
              Tire suas dúvidas
            </span>
            <h2 className="mt-3 font-display text-3xl font-black uppercase text-white md:text-5xl">
              Perguntas sobre nosso{" "}
              <span className="text-[#3DFF8A]">método e tráfego pago</span>
            </h2>
          </div>
          <FaqAccordion items={faqHome} />
        </div>
      </section>

      <HomeForm onLeadInfoChange={setLeadInfo} />

      <footer className="border-t border-border py-10">
        <div className="mx-auto max-w-6xl px-6 text-center text-sm text-muted-foreground">
          © {new Date().getFullYear()} .PONTO — Sua empresa no digital.
        </div>
      </footer>

      <WhatsAppFab settings={waSettings} leadInfo={leadInfo} />
    </div>
  );
}

function WhatsAppFab({
  settings,
  leadInfo,
}: {
  settings: WhatsAppSettings | null;
  leadInfo: { nome: string; cidade: string };
}) {
  const number = settings?.number ?? "5511999999999";
  const template =
    settings?.template ??
    "Olá! Meu nome é {nome}, sou de {cidade} e vim pela página de {nicho}. Quero saber mais sobre tráfego pago.";
  const href = buildWhatsAppHref({
    number,
    template,
    nome: leadInfo.nome,
    cidade: leadInfo.cidade,
    nicho: HOME_NICHE,
  });
  const handleClick = () => {
    trackEvent("whatsapp_click", {
      nicho: HOME_NICHE,
      location: "fab_home",
      has_lead_info: Boolean(leadInfo.nome || leadInfo.cidade),
    });
  };
  return (
    <a
      href={href}
      target="_blank"
      rel="noopener noreferrer"
      onClick={handleClick}
      data-event="whatsapp_click"
      aria-label="Falar no WhatsApp"
      className="fixed bottom-6 right-6 z-50 inline-flex items-center gap-2 rounded-full bg-[#25D366] px-5 py-4 font-bold text-white shadow-[0_10px_30px_rgba(37,211,102,0.5)] transition-transform hover:scale-105"
    >
      <svg viewBox="0 0 32 32" className="h-6 w-6 fill-current" aria-hidden="true">
        <path d="M16 .5C7.4.5.5 7.4.5 16c0 2.8.7 5.5 2.1 7.9L.5 31.5l7.8-2c2.3 1.3 4.9 1.9 7.6 1.9 8.6 0 15.5-6.9 15.5-15.5S24.6.5 16 .5zm0 28.2c-2.4 0-4.8-.6-6.9-1.9l-.5-.3-4.6 1.2 1.2-4.5-.3-.5C3.6 20.6 3 18.3 3 16 3 8.8 8.8 3 16 3s13 5.8 13 13-5.8 12.7-13 12.7zm7.2-9.5c-.4-.2-2.3-1.1-2.7-1.3-.4-.1-.6-.2-.9.2s-1 1.3-1.3 1.6c-.2.2-.5.3-.9.1-.4-.2-1.7-.6-3.2-2-1.2-1.1-2-2.4-2.2-2.8-.2-.4 0-.6.2-.8.2-.2.4-.5.6-.7.2-.2.2-.4.4-.6.1-.3 0-.5 0-.7-.1-.2-.9-2.2-1.3-3-.3-.8-.7-.7-.9-.7h-.8c-.3 0-.7.1-1.1.5-.4.4-1.4 1.4-1.4 3.4s1.5 4 1.7 4.2c.2.3 2.9 4.5 7.1 6.3 1 .4 1.8.7 2.4.9.9.3 1.8.2 2.5.1.8-.1 2.3-1 2.6-1.9.3-.9.3-1.7.2-1.9 0-.2-.3-.3-.7-.5z" />
      </svg>
      <span className="hidden sm:inline">WhatsApp</span>
    </a>
  );
}

function HomeForm({ onLeadInfoChange }: { onLeadInfoChange?: (v: { nome: string; cidade: string }) => void }) {
  const [sent, setSent] = useState(false);
  const [loading, setLoading] = useState(false);
  const [form, setForm] = useState({ nome: "", email: "", telefone: "", cidade: "" });

  const update = (k: keyof typeof form) => (e: React.ChangeEvent<HTMLInputElement>) => {
    const value = e.target.value;
    setForm((s) => {
      const next = { ...s, [k]: value };
      if ((k === "nome" || k === "cidade") && onLeadInfoChange) {
        onLeadInfoChange({ nome: next.nome, cidade: next.cidade });
      }
      return next;
    });
  };

  const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    const nome = form.nome.trim();
    const email = form.email.trim();
    const telefone = form.telefone.trim();
    const cidade = form.cidade.trim();

    if (!nome || nome.length > 120) return toast.error("Informe seu nome.");
    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) || email.length > 255)
      return toast.error("E-mail inválido.");
    if (telefone.length < 6 || telefone.length > 40) return toast.error("Telefone inválido.");
    if (!cidade || cidade.length > 120) return toast.error("Informe sua cidade.");

    setLoading(true);
    const utm = getStoredUtm();
    const { error } = await supabase.from("leads").insert({
      nome,
      email,
      telefone,
      cidade,
      nicho: HOME_NICHE,
      variant: null,
      utm_source: utm.utm_source ?? null,
      utm_medium: utm.utm_medium ?? null,
      utm_campaign: utm.utm_campaign ?? null,
      utm_term: utm.utm_term ?? null,
      utm_content: utm.utm_content ?? null,
      referrer: utm.referrer ?? null,
      landing_path: utm.landing_path ?? (typeof window !== "undefined" ? window.location.pathname : null),
    });
    setLoading(false);

    if (error) {
      console.error(error);
      toast.error("Não foi possível enviar. Tente novamente.");
      return;
    }
    trackEvent("lead_generated", { nicho: HOME_NICHE, location: "home_form" });
    setForm({ nome: "", email: "", telefone: "", cidade: "" });
    onLeadInfoChange?.({ nome: "", cidade: "" });
    setSent(true);
  };

  return (
    <section id="contato" className="bg-background py-20">
      <div className="mx-auto grid max-w-6xl gap-12 px-6 md:grid-cols-2 md:items-center">
        <div>
          <span className="text-xs font-bold uppercase tracking-[0.3em] text-[#3DFF8A]">
            Fale com a gente
          </span>
          <h2 className="mt-4 font-display text-3xl font-black uppercase leading-tight md:text-5xl">
            Pronto para colocar sua empresa no{" "}
            <span className="text-[#3DFF8A]">.PONTO certo?</span>
          </h2>
          <p className="mt-6 text-lg text-muted-foreground">
            Preencha o formulário e um especialista entra em contato em até 5 minutos no horário comercial. Sem compromisso, sem enrolação.
          </p>
          <div className="mt-8 rounded-2xl border border-border bg-card p-5 text-sm text-muted-foreground">
            🔒 Seus dados ficam protegidos. Não enviamos spam, não vendemos lista.
          </div>
        </div>

        <form
          onSubmit={handleSubmit}
          className="rounded-3xl border border-border bg-card p-8 shadow-2xl"
        >
          {sent ? (
            <div className="py-16 text-center">
              <div className="text-5xl">✅</div>
              <h3 className="mt-4 text-2xl font-black">Recebemos seu contato!</h3>
              <p className="mt-2 text-muted-foreground">Um especialista falará com você em breve.</p>
            </div>
          ) : (
            <div className="space-y-4">
              <h3 className="text-xl font-bold">Fale com um especialista</h3>
              <p className="text-sm text-muted-foreground">Resposta em até 5 minutos no horário comercial.</p>
              <input required value={form.nome} onChange={update("nome")} placeholder="Seu nome" maxLength={120}
                className="w-full rounded-xl border border-border bg-background px-4 py-3 text-sm outline-none placeholder:text-muted-foreground focus:border-primary" />
              <input required type="email" value={form.email} onChange={update("email")} placeholder="Seu melhor e-mail" maxLength={255}
                className="w-full rounded-xl border border-border bg-background px-4 py-3 text-sm outline-none placeholder:text-muted-foreground focus:border-primary" />
              <input required type="tel" value={form.telefone} onChange={update("telefone")} placeholder="Telefone / WhatsApp" maxLength={40}
                className="w-full rounded-xl border border-border bg-background px-4 py-3 text-sm outline-none placeholder:text-muted-foreground focus:border-primary" />
              <input required value={form.cidade} onChange={update("cidade")} placeholder="Cidade" maxLength={120}
                className="w-full rounded-xl border border-border bg-background px-4 py-3 text-sm outline-none placeholder:text-muted-foreground focus:border-primary" />
              <button
                type="submit"
                disabled={loading}
                className="w-full rounded-xl bg-[#3DFF8A] py-4 font-black uppercase text-black transition-transform hover:scale-[1.02] disabled:opacity-60 disabled:hover:scale-100"
              >
                {loading ? "Enviando..." : "Quero falar com um especialista ↗"}
              </button>
              <p className="text-center text-xs text-muted-foreground">
                Ao enviar, você concorda em receber contato da .PONTO.
              </p>
            </div>
          )}
        </form>
      </div>
    </section>
  );
}

function FaqAccordion({ items }: { items: { q: string; a: string }[] }) {
  const [open, setOpen] = useState<number | null>(null);
  return (
    <div className="mt-14 space-y-4">
      {items.map((item, i) => {
        const isOpen = open === i;
        return (
          <div
            key={i}
            className="rounded-2xl border border-white/10 bg-white/5 backdrop-blur-sm transition-colors hover:bg-white/10"
          >
            <button
              onClick={() => setOpen(isOpen ? null : i)}
              className="flex w-full items-center justify-between px-6 py-5 text-left"
            >
              <span className="font-display text-lg font-bold text-white md:text-xl">
                {item.q}
              </span>
              <span
                className={`ml-4 shrink-0 text-2xl font-bold text-[#3DFF8A] transition-transform ${
                  isOpen ? "rotate-45" : ""
                }`}
              >
                +
              </span>
            </button>
            <div
              className={`overflow-hidden transition-all duration-300 ${
                isOpen ? "max-h-96 opacity-100" : "max-h-0 opacity-0"
              }`}
            >
              <p className="px-6 pb-5 text-sm leading-relaxed text-white/80 md:text-base">
                {item.a}
              </p>
            </div>
          </div>
        );
      })}
    </div>
  );
}
