import { NextResponse } from "next/server";
import { canCompany, getCompanyContext } from "@/lib/company-context";
import { createClient } from "@/lib/supabase-server";
import { pdfDoCatalogo, situacaoDoCatalogo } from "@/lib/catalogo-pdf/servidor/fila";

/**
 * Um catálogo da fila: como está (GET) e o PDF pronto (GET ?baixar=1).
 *
 * Só a empresa que pediu enxerga o catálogo. O número é sorteado, mas a
 * conferência da empresa é o que vale: número vazado de outra empresa dá 404.
 */
export async function GET(req: Request, contexto: { params: Promise<{ id: string }> }) {
  const { id } = await contexto.params;
  const supabase = await createClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();
  if (!user) return NextResponse.json({ error: "Não autenticado." }, { status: 401 });
  const ctx = await getCompanyContext(supabase, user);
  if (!canCompany(ctx, user.id, "catalog.products.read")) {
    return NextResponse.json({ error: "Sem permissão para gerar o catálogo da loja." }, { status: 403 });
  }

  if (new URL(req.url).searchParams.get("baixar") === "1") {
    const arquivo = await pdfDoCatalogo(id, ctx.companyId);
    if (!arquivo) return NextResponse.json({ error: "Este catálogo não está mais aqui. Gere de novo." }, { status: 404 });
    const simples = arquivo.nome.normalize("NFD").replace(/[̀-ͯ]/g, "").replace(/[^\x20-\x7E]/g, "");
    return new Response(new Uint8Array(arquivo.conteudo), {
      headers: {
        "Content-Type": "application/pdf",
        "Content-Length": String(arquivo.conteudo.length),
        "Content-Disposition": `attachment; filename="${simples.replace(/"/g, "")}"; filename*=UTF-8''${encodeURIComponent(arquivo.nome)}`,
        "Cache-Control": "no-store",
      },
    });
  }

  const situacao = situacaoDoCatalogo(id, ctx.companyId);
  if (!situacao) {
    return NextResponse.json({ error: "Este catálogo não está mais aqui. Gere de novo." }, { status: 404 });
  }
  return NextResponse.json(situacao, { headers: { "Cache-Control": "no-store" } });
}
