import type { Metadata } from "next";
import { notFound, redirect } from "next/navigation";

import CompraRapida from "@/components/digitais/CompraRapida";
import FontesDaLoja from "@/components/FontesDaLoja";
import { camposDaCompra } from "@/lib/digitais/compra";
import { entregaNaVitrine, lerConfigDigitalDaLoja, textoDoPrazoDoTipo, prazoQueVale } from "@/lib/digitais/produto";
import { codigosAVenda, lerProdutoDigitalAVenda } from "@/lib/digitais/servidor/compra";
import { lerAjustesDigitais, lerPagamentoDaCompra } from "@/lib/digitais/servidor/vitrine";
import { miniatura, TAMANHO } from "@/lib/foto";
import { carregarLoja } from "@/lib/loja/dados-da-loja";
import { enderecoDeLogin, lerVisaoDaLoja } from "@/lib/loja/visao.server";
import { normalizeWhatsappForLink } from "@/lib/phone";
import { createAdminClient } from "@/lib/supabase-admin";

/*
 * A compra rápida de um produto digital (prévia 3): os dados, o Pix ou o
 * cartão, e a mesma tela vira a entrega quando o pagamento cai.
 *
 * Fica fora do carrinho e do checkout de sempre. `?pedido=` retoma uma compra
 * já começada neste navegador (volta do cartão do Asaas, página recarregada).
 */

export const dynamic = "force-dynamic";
export const revalidate = 0;

type Props = {
  params: Promise<{ slug: string; produtoId: string }>;
  searchParams?: Promise<{ pedido?: string }>;
};

export async function generateMetadata(props: Props): Promise<Metadata> {
  const { slug } = await props.params;
  const dados = await carregarLoja(slug);
  const nome = dados?.profile?.catalog_name || dados?.profile?.store_name || "Loja";
  return { title: { absolute: `Compra segura | ${nome}` }, robots: { index: false, follow: false } };
}

export default async function PaginaDaCompraRapida(props: Props) {
  const { slug, produtoId } = await props.params;
  const buscados = (await props.searchParams) || {};
  const dados = await carregarLoja(slug);
  const perfil = dados?.profile;
  if (!dados || !perfil) return notFound();
  const lojaId = String(perfil.id);

  const { visao, cliente } = await lerVisaoDaLoja(slug, perfil);
  if (visao.lojaFechada) redirect(`/${slug}`);
  if (visao.exigeLoginNaLoja || visao.precisaEntrar) redirect(enderecoDeLogin(slug, `/${slug}/comprar/${produtoId}`));

  const admin = createAdminClient();
  const produto = await lerProdutoDigitalAVenda(admin, lojaId, produtoId);
  const pedidoRetomado = /^[0-9a-f-]{36}$/i.test(String(buscados.pedido || "")) ? String(buscados.pedido) : null;
  if (!produto && !pedidoRetomado) return notFound();
  /* Sem compra pela loja para este visitante, a página do produto explica o porquê. */
  if (!pedidoRetomado && (!visao.podeComprar || visao.lojaPausada || !visao.mostrarPreco)) redirect(`/${slug}/p/${produtoId}`);

  const [pagamento, ajustes] = await Promise.all([lerPagamentoDaCompra(admin, lojaId), lerAjustesDigitais(admin, lojaId)]);
  if (produto && produto.price > 0 && !pagamento.meios.length && !pedidoRetomado) redirect(`/${slug}/p/${produtoId}`);

  const config = lerConfigDigitalDaLoja(produto?.digital_config);
  /* Códigos e licenças: esgotado volta para a página do produto, que explica. */
  if (produto && !pedidoRetomado && config.tipo === "codigo" && (await codigosAVenda(admin, lojaId, produto.id)) <= 0) {
    redirect(`/${slug}/p/${produtoId}`);
  }
  const entrega = entregaNaVitrine(config);
  const campos = produto && config.entrega.modo === "encomenda" ? camposDaCompra(produto.custom_fields_config) : [];
  const prazo = prazoQueVale(config.prazoDias, ajustes.prazoDias);
  /* Curso: "assista", não "baixe" (código: "copie"); e o resumo diz quantas aulas. */
  const ehCurso = config.tipo === "curso";
  const textoDoPrazoAqui = textoDoPrazoDoTipo(config.tipo, prazo);
  const corDaMarca = String(perfil.primary_color || "#4F46E5");
  const nomeDaLoja = String(perfil.catalog_name || perfil.store_name || "Loja");

  return (
    <>
      <FontesDaLoja perfil={perfil} />
      <CompraRapida
        slug={slug}
        loja={{
          nome: nomeDaLoja,
          logo: miniatura(perfil.catalog_logo_url || perfil.logo_url, TAMANHO.logo) || null,
          cor: corDaMarca,
          whatsapp: normalizeWhatsappForLink(perfil.whatsapp) || null,
        }}
        produto={
          produto
            ? {
                id: produto.id,
                nome: produto.name,
                preco: produto.price,
                imagem: produto.image_url ? miniatura(produto.image_url, TAMANHO.card) || produto.image_url : null,
                resumo: ehCurso ? ["Conteúdo em vídeo", config.recebe[0]?.detalhe].filter(Boolean).join(" · ") : config.resumo,
                itens: ehCurso ? 0 : config.recebe.length,
                prazo: textoDoPrazoAqui,
              }
            : { id: produtoId, nome: "Sua compra", preco: 0, imagem: null, resumo: null, itens: 0, prazo: textoDoPrazoAqui }
        }
        pagamento={pagamento}
        pedidoRetomado={pedidoRetomado}
        botaoWhatsapp={ajustes.botaoWhatsapp}
        entrega={entrega}
        campos={campos}
        curso={ehCurso}
        preenchido={
          cliente && cliente.status === "approved"
            ? {
                nome: cliente.name || "",
                email: cliente.email || "",
                whatsapp: cliente.whatsapp || cliente.phone || "",
                documento: cliente.document || "",
              }
            : null
        }
      />
    </>
  );
}
