import { cookies } from "next/headers";
import { NextResponse } from "next/server";

import { cobrarPedidoDaLoja, type PaymentSubmitBody } from "@/lib/cobranca-da-loja.server";
import { nomeDoCookieDaCompra } from "@/lib/digitais/compra";
import { conferirChave } from "@/lib/digitais/servidor/acessos";
import { createAdminClient } from "@/lib/supabase-admin";

/*
 * Cobra a compra digital (Pix ou cartão) pelo mesmo caminho da finalização da
 * loja. Só o navegador que fez a compra paga: a chave dele vem no cookie e
 * vale só para este pedido.
 */
export async function POST(request: Request) {
  try {
    const corpo = (await request.json().catch(() => null)) as (PaymentSubmitBody & { pedidoId?: string; produtoId?: string }) | null;
    const slug = typeof corpo?.slug === "string" ? corpo.slug.trim().toLowerCase() : "";
    const pedidoId = typeof corpo?.pedidoId === "string" ? corpo.pedidoId : "";
    if (!slug || !/^[0-9a-f-]{36}$/i.test(pedidoId)) return NextResponse.json({ error: "Compra inválida." }, { status: 400 });

    const chave = (await cookies()).get(nomeDoCookieDaCompra(pedidoId))?.value ?? "";
    const admin = createAdminClient();
    const conferida = await conferirChave(admin, chave, "compra");
    if (!conferida || conferida.catalogOrderId !== pedidoId) {
      return NextResponse.json({ error: "Esta compra não foi feita neste navegador. Faça a compra de novo." }, { status: 401 });
    }

    const { data: pedido } = await admin
      .from("catalog_orders")
      .select("id,user_id,client_id,number,total,currency,status,customer_name,cart_payload,payment_status")
      .eq("id", pedidoId)
      .eq("user_id", conferida.lojaId)
      .maybeSingle();
    const linha = pedido as {
      id: string;
      user_id: string;
      client_id: string | null;
      number: number | null;
      total: number | null;
      currency: string | null;
      status: string;
      customer_name: string | null;
      cart_payload: unknown;
      payment_status: string | null;
    } | null;
    if (!linha || !linha.client_id) return NextResponse.json({ error: "Compra não encontrada." }, { status: 404 });
    if (linha.status === "canceled") return NextResponse.json({ error: "Esta compra foi cancelada." }, { status: 400 });
    if (linha.payment_status === "approved") return NextResponse.json({ error: "Esta compra já está paga." }, { status: 409 });

    const produtoId = typeof corpo?.produtoId === "string" && /^[0-9a-f-]{36}$/i.test(corpo.produtoId) ? corpo.produtoId : null;
    const volta = produtoId
      ? `/${encodeURIComponent(slug)}/comprar/${encodeURIComponent(produtoId)}?pedido=${encodeURIComponent(pedidoId)}`
      : `/${encodeURIComponent(slug)}`;

    return await cobrarPedidoDaLoja({
      request,
      admin,
      body: { ...corpo, slug, orderId: pedidoId },
      slug,
      order: linha,
      clienteId: linha.client_id,
      voltaDoCartao: volta,
      sempreCriarPedido: true,
    });
  } catch (erro) {
    const mensagem = erro instanceof Error ? erro.message : "Não foi possível processar o pagamento.";
    return NextResponse.json({ error: mensagem }, { status: 500 });
  }
}
