import { timingSafeEqual } from "node:crypto";

import { NextResponse } from "next/server";

import { ambienteFiscal } from "@/lib/fiscal/ambiente";
import { processarFila } from "@/lib/fiscal/servidor/fila";

export const runtime = "nodejs";

/**
 * Roda uma volta da fila das notas por fora (um agendador externo, se um dia
 * o processo do servidor não puder segurar o relógio). Protegida por
 * `FISCAL_TAREFAS_SEGREDO`; sem a variável, a rota não existe.
 */
export async function POST(req: Request) {
  const segredo = String(process.env.FISCAL_TAREFAS_SEGREDO || "").trim();
  if (!segredo) return NextResponse.json({ error: "Não encontrado." }, { status: 404 });
  const recebido = Buffer.from(String(req.headers.get("x-fiscal-segredo") || ""));
  const esperado = Buffer.from(segredo);
  if (recebido.length !== esperado.length || !timingSafeEqual(recebido, esperado)) {
    return NextResponse.json({ error: "Não autorizado." }, { status: 401 });
  }
  const feitas = await processarFila(ambienteFiscal(), 25);
  return NextResponse.json({ ok: true, feitas });
}
