import { APP_NAME } from "@/utils/constants";
import { seoStateBySlug } from "@/data/seo/states";
import { assignKeywordsForPage } from "@/lib/seo/keyword-assignment";
import type { SeoFaqItem, SeoPageContent, SeoPageContext } from "./types";

function locationPhrase(ctx: SeoPageContext): string {
  if (ctx.city) {
    const state = seoStateBySlug[ctx.city.stateSlug];
    return `em ${ctx.city.name}${state ? `, ${state.name}` : ""}`;
  }
  if (ctx.state) {
    const prep = ctx.state.preposition === "no" ? "no" : "na";
    return `${prep} ${ctx.state.name}`;
  }
  return "em todo o Brasil";
}

function segmentPhrase(ctx: SeoPageContext): string {
  if (!ctx.segment) return "";
  return ` para ${ctx.segment.plural}`;
}

export function generatePageContent(ctx: SeoPageContext): SeoPageContent {
  const loc = locationPhrase(ctx);
  const seg = segmentPhrase(ctx);
  const service = ctx.service;
  const segment = ctx.segment;
  const locationLabel = ctx.city?.name ?? ctx.state?.name ?? "Brasil";

  let h1 = "";
  let eyebrow = "Solução digital";
  let intro = "";

  switch (ctx.kind) {
    case "service-city":
      h1 = `${service!.name}${seg} ${loc}`;
      eyebrow = `${service!.name} · ${ctx.city!.name}`;
      intro = `A ${APP_NAME} entrega ${service!.shortName}${seg} com equipe sênior, UX premium e implantação ágil ${loc}. Ideal para empresas que querem vender mais com tecnologia própria.`;
      break;
    case "service-state":
      h1 = `${service!.name}${seg} ${loc}`;
      eyebrow = `${service!.name} · ${ctx.state!.uf}`;
      intro = `Atendemos empresas ${loc} com ${service!.shortName}${seg}: discovery, design, desenvolvimento e publicação com suporte contínuo da ${APP_NAME}.`;
      break;
    case "segment":
      h1 = `App para ${segment!.name}`;
      eyebrow = `App para ${segment!.name}`;
      intro = `Desenvolvemos aplicativos e sistemas sob medida para ${segment!.plural}. ${segment!.description}`;
      break;
    case "segment-city":
      h1 = `App para ${segment!.name} ${loc}`;
      eyebrow = `${segment!.name} · ${ctx.city!.name}`;
      intro = `Solução completa para ${segment!.plural} ${loc}: pedidos, cardápio digital, painel admin e automação comercial com a ${APP_NAME}.`;
      break;
    case "segment-state":
      h1 = `App para ${segment!.name} ${loc}`;
      eyebrow = `${segment!.name} · ${ctx.state!.uf}`;
      intro = `Projetos para ${segment!.plural} ${loc} com foco em conversão, operação enxuta e experiência premium para o seu cliente final.`;
      break;
    case "service-segment":
      h1 = `${service!.name} para ${segment!.name}`;
      eyebrow = `${service!.name}`;
      intro = `${service!.description} Especialistas em ${segment!.plural} com funcionalidades que o seu segmento exige.`;
      break;
    case "service-segment-city":
      h1 = `${service!.name} para ${segment!.name} ${loc}`;
      eyebrow = `${ctx.city!.name} · ${segment!.name}`;
      intro = `${service!.shortName} para ${segment!.plural} ${loc}: combinamos expertise local com entrega enterprise — do discovery ao go-live.`;
      break;
    case "service-segment-state":
      h1 = `${service!.name} para ${segment!.name} ${loc}`;
      eyebrow = `${ctx.state!.uf} · ${segment!.name}`;
      intro = `Cobertura ${loc} para ${segment!.plural} que precisam de ${service!.shortName} com escalabilidade, segurança e time dedicado.`;
      break;
    default:
      h1 = `Desenvolvimento de aplicativos ${loc}`;
      intro = `A ${APP_NAME} cria apps e sistemas sob medida para empresas ${loc}.`;
  }

  const title = buildTitle(ctx, locationLabel, seg);
  const metaDescription = buildMetaDescription(ctx, loc, seg);
  const keywords = buildKeywords(ctx);
  const blocks = buildContentBlocks(ctx, loc, seg);
  const faq = buildFaq(ctx, loc);
  const canonicalPath = `/${ctx.slug}`;

  return {
    h1,
    eyebrow,
    intro,
    blocks,
    faq,
    keywords,
    title,
    metaDescription,
    canonicalPath,
    locationLabel,
    ctaHeadline: `Quer ${service?.shortName ?? "seu aplicativo"}${seg} ${loc}?`,
    ctaSubline: "Fale com um especialista e receba proposta sob medida em até 24h.",
  };
}

function buildTitle(ctx: SeoPageContext, location: string, seg: string): string {
  const service = ctx.service?.name;
  const segment = ctx.segment?.name;
  if (ctx.kind === "service-segment-city" || ctx.kind === "service-segment-state") {
    return `${service} para ${segment} em ${location}`;
  }
  if (ctx.kind === "service-city" || ctx.kind === "service-state") {
    return `${service}${seg} em ${location}`;
  }
  if (ctx.kind === "segment-city" || ctx.kind === "segment-state") {
    return `App para ${segment} em ${location}`;
  }
  if (ctx.kind === "segment") return `App para ${segment}`;
  if (ctx.kind === "service-segment") return `${service} para ${segment}`;
  return `Desenvolvimento de Apps em ${location}`;
}

function buildMetaDescription(ctx: SeoPageContext, loc: string, seg: string): string {
  const service = ctx.service;
  const segment = ctx.segment;
  if (service && segment && (ctx.city || ctx.state)) {
    return `Desenvolvimento profissional de ${service.shortName} para ${segment.plural} ${loc}. Sistema delivery, cardápio digital, painel admin e aplicativo completo. ${APP_NAME}.`;
  }
  if (service && (ctx.city || ctx.state)) {
    return `${service.name}${seg} ${loc}. ${service.description.slice(0, 120)}… Contrate com a ${APP_NAME}.`;
  }
  if (segment && (ctx.city || ctx.state)) {
    return `App e sistema para ${segment.plural} ${loc}. Pedidos online, automação e UX premium. Orçamento com a ${APP_NAME}.`;
  }
  if (segment) {
    return `Aplicativo para ${segment.name}: ${segment.description} Solução completa com a ${APP_NAME}.`;
  }
  return `Criação de aplicativos e sistemas ${loc}. Delivery, SaaS, automação comercial e apps empresariais com a ${APP_NAME}.`;
}

function buildKeywords(ctx: SeoPageContext): string[] {
  return assignKeywordsForPage(ctx);
}

function buildContentBlocks(
  ctx: SeoPageContext,
  loc: string,
  seg: string,
): SeoPageContent["blocks"] {
  const service = ctx.service;
  const segment = ctx.segment;
  const features = service?.features ?? [
    "UX/UI profissional",
    "Painel administrativo",
    "Integrações e APIs",
    "Suporte pós-entrega",
  ];

  return [
    {
      id: "por-que",
      heading: `Por que investir${seg} ${loc}?`,
      paragraphs: [
        `O mercado ${loc} exige presença digital forte: clientes esperam pedir pelo celular, acompanhar status e pagar online.`,
        segment
          ? `Para ${segment.plural}, um app próprio reduz taxas de marketplaces, fortalece marca e aumenta recorrência.`
          : `Um aplicativo próprio reduz dependência de terceiros e coloca sua operação sob controle total.`,
        `A ${APP_NAME} une discovery estratégico, design premium e engenharia escalável para acelerar seu time-to-market.`,
      ],
    },
    {
      id: "entregas",
      heading: "O que está incluso no projeto",
      paragraphs: [
        ...features.map((f) => `• ${f}`),
        segment
          ? `Funcionalidades adaptadas ao dia a dia de ${segment.plural}: fluxos, telas e integrações alinhados ao seu modelo.`
          : "Escopo definido em workshop inicial com priorização por impacto em receita e operação.",
      ],
    },
    {
      id: "processo",
      heading: "Como trabalhamos",
      paragraphs: [
        "1. Diagnóstico e escopo — entendemos metas, integrações e prazo.",
        "2. UX/UI — protótipos navegáveis validados com seu time.",
        "3. Desenvolvimento ágil — entregas quinzenais com demo.",
        "4. Go-live — publicação, treinamento e monitoramento.",
      ],
    },
    {
      id: "local",
      heading: `Atendimento ${loc}`,
      paragraphs: [
        `Projetos ${loc} com comunicação remota e reuniões síncronas quando necessário.`,
        "Equipe sênior, documentação clara e contrato transparente — sem surpresas no meio do caminho.",
      ],
    },
  ];
}

function buildFaq(ctx: SeoPageContext, loc: string): SeoFaqItem[] {
  const segment = ctx.segment;
  const service = ctx.service;
  const city = ctx.city?.name;
  const items: SeoFaqItem[] = [
    {
      question: `Quanto custa ${service?.shortName ?? "um aplicativo"}${segment ? ` para ${segment.name.toLowerCase()}` : ""}${city ? ` em ${city}` : ""}?`,
      answer:
        "O investimento varia conforme escopo, integrações e prazo. Fazemos proposta personalizada após um briefing de 30 minutos — sem compromisso.",
    },
    {
      question: "Qual o prazo médio de desenvolvimento?",
      answer:
        "MVPs enxutos: 6 a 10 semanas. Projetos completos com painel, pagamentos e integrações: 10 a 16 semanas, conforme complexidade.",
    },
    {
      question: "Vocês publicam na App Store e Google Play?",
      answer:
        "Sim. Cuidamos das contas de desenvolvedor, assets, políticas e submissão. Também entregamos painel web quando faz sentido para sua operação.",
    },
    {
      question: "O código e os dados são meus?",
      answer:
        "Sim. Contrato prevê propriedade intelectual do software desenvolvido para seu negócio, com documentação e credenciais entregues no go-live.",
    },
  ];

  if (ctx.city) {
    items.push({
      question: `Atendem empresas em ${ctx.city.name} e região?`,
      answer: `Sim. Temos clientes ${loc} e atendimento 100% profissional com reuniões online e alinhamentos assíncronos via WhatsApp e e-mail.`,
    });
  }

  if (segment) {
    items.push({
      question: `O sistema funciona para ${segment.plural} de qualquer porte?`,
      answer:
        "Sim. Desde operação única até redes com múltiplas unidades — arquitetura preparada para escalar usuários e pedidos.",
    });
    items.push({
      question: "Integra com iFood, Rappi ou WhatsApp?",
      answer:
        "Avaliamos integrações necessárias no discovery. WhatsApp, gateways de pagamento, ERPs e hubs de delivery são comuns nos nossos projetos.",
    });
  }

  if (service?.slug === "sistema-delivery" || service?.slug === "cardapio-digital") {
    items.push({
      question: "Posso atualizar cardápio e preços sozinho?",
      answer:
        "Sim. O painel administrativo permite editar itens, categorias, fotos e disponibilidade em tempo real, sem depender de desenvolvedor.",
    });
  }

  items.push({
    question: "Como começar?",
    answer:
      `Clique em solicitar proposta ou fale no WhatsApp. Retornamos em até 24h úteis com próximos passos${city ? ` para seu projeto em ${city}` : ""}.`,
  });

  return items.slice(0, 8);
}
