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

import { nomeDoCookieDaCompra } from "@/lib/digitais/compra";
import { conferirChave, criarChave, pedidoInternoDaCompra } from "@/lib/digitais/servidor/acessos";
import { createAdminClient } from "@/lib/supabase-admin";

/*
 * "Salvar no meu WhatsApp": um link da entrega para o comprador guardar
 * (o mesmo tipo de link do e-mail). Só o navegador que fez a compra pede, e
 * só depois de paga.
 */
export async function POST(request: Request) {
  const semCache = { headers: { "cache-control": "no-store" } };
  try {
    const corpo = (await request.json().catch(() => null)) as { pedidoId?: unknown } | null;
    const pedidoId = typeof corpo?.pedidoId === "string" ? corpo.pedidoId : "";
    if (!/^[0-9a-f-]{36}$/i.test(pedidoId)) return NextResponse.json({ error: "Compra inválida." }, { status: 400, ...semCache });

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

    const pedidoInterno = await pedidoInternoDaCompra(admin, pedidoId);
    if (!pedidoInterno) return NextResponse.json({ error: "O pagamento ainda não foi confirmado." }, { status: 409, ...semCache });

    const [{ data: pedido }, { data: perfil }] = await Promise.all([
      admin.from("orders").select("id,client_id,status").eq("id", pedidoInterno).eq("user_id", conferida.lojaId).maybeSingle(),
      admin.from("profiles").select("slug").eq("id", conferida.lojaId).maybeSingle(),
    ]);
    const linha = pedido as { id: string; client_id: string | null; status: string } | null;
    const slug = String((perfil as { slug?: string | null } | null)?.slug || "");
    if (!linha || linha.status === "canceled" || !slug) {
      return NextResponse.json({ error: "Esta compra não está disponível." }, { status: 404, ...semCache });
    }

    const chaveDaEntrega = await criarChave(admin, {
      lojaId: conferida.lojaId,
      clienteId: linha.client_id,
      finalidade: "entrega",
      orderId: linha.id,
      catalogOrderId: pedidoId,
    });
    return NextResponse.json({ ok: true, caminho: `/${slug}/entrega/${chaveDaEntrega}` }, semCache);
  } catch (erro) {
    console.error("[digitais] link-da-entrega", erro);
    return NextResponse.json({ error: "Não foi possível gerar o link agora." }, { status: 500, ...semCache });
  }
}
