import { NextResponse } from "next/server";

import { ambienteFiscal } from "@/lib/nota-fiscal-da-loja";
import { createAdminClient } from "@/lib/supabase-admin";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;

/**
 * O PDF e o XML da nota fiscal pelo link de acompanhamento do pedido.
 *
 * Quem tem o link do pedido (o token de status) baixa as notas autorizadas
 * dele. O arquivo sai do bucket privado; a rota confere o token, o pedido e a
 * nota antes — um id de nota solto não abre nada.
 */
export async function GET(req: Request, { params }: { params: Promise<{ token: string; id: string }> }) {
  const { token, id } = await params;
  if (!token || token.length < 16 || !UUID.test(id)) return NextResponse.json({ error: "Nota não encontrada." }, { status: 404 });
  const tipo = new URL(req.url).searchParams.get("tipo") === "xml" ? "xml" : "pdf";

  const admin = createAdminClient();
  const { data: pedido } = await admin.from("orders").select("id,share_enabled").eq("share_token", token).maybeSingle();
  if (!pedido || pedido.share_enabled === false) return NextResponse.json({ error: "Nota não encontrada." }, { status: 404 });

  const { data: nota } = await admin
    .from("fiscal_notas")
    .select("id,modelo,numero,chave,status,ambiente,ambiente_nota,pdf_path,xml_path")
    .eq("id", id)
    .eq("pedido_id", pedido.id)
    .in("status", ["autorizada", "cancelada"])
    .maybeSingle();
  if (!nota || nota.ambiente !== ambienteFiscal()) return NextResponse.json({ error: "Nota não encontrada." }, { status: 404 });
  if (process.env.NODE_ENV === "production" && nota.ambiente_nota !== "producao") {
    return NextResponse.json({ error: "Nota não encontrada." }, { status: 404 });
  }

  const caminho = tipo === "xml" ? nota.xml_path : nota.pdf_path;
  if (!caminho) return NextResponse.json({ error: "A nota ainda está sendo preparada. Tente de novo em alguns minutos." }, { status: 409 });

  const { data: arquivo, error } = await admin.storage.from("documentos-fiscais").download(String(caminho));
  if (error || !arquivo) return NextResponse.json({ error: "Arquivo indisponível no momento." }, { status: 503 });

  const sigla = nota.modelo === "nfce" ? "NFC-e" : nota.modelo === "nfse" ? "NFS-e" : "NF-e";
  const nome = `${sigla}${nota.numero ? `-${nota.numero}` : ""}.${tipo}`;
  return new Response(await arquivo.arrayBuffer(), {
    headers: {
      "Content-Type": tipo === "xml" ? "application/xml" : "application/pdf",
      "Content-Disposition": `${tipo === "xml" ? "attachment" : "inline"}; filename="${nome}"`,
      "Cache-Control": "private, no-store",
      "X-Robots-Tag": "noindex",
    },
  });
}
