/**
 * Imprime um PDF do próprio sistema sem abrir outra aba: baixa o arquivo, põe
 * num quadro invisível da página e chama a impressão dele.
 *
 * O navegador mostra a janela de impressão. Para o cupom sair direto na
 * impressora do balcão, o Chrome daquele computador precisa ser aberto com a
 * impressão silenciosa (--kiosk-printing) e a impressora do cupom como padrão.
 */
export async function imprimirPdf(url: string): Promise<void> {
  const resposta = await fetch(url, { cache: "no-store" });
  if (!resposta.ok) {
    const corpo = (await resposta.json().catch(() => null)) as { error?: string } | null;
    throw new Error(corpo?.error || "Não foi possível buscar o cupom para imprimir.");
  }
  const conteudo = await resposta.blob();
  const endereco = URL.createObjectURL(new Blob([conteudo], { type: "application/pdf" }));

  await new Promise<void>((resolver, rejeitar) => {
    const quadro = document.createElement("iframe");
    quadro.setAttribute("aria-hidden", "true");
    quadro.tabIndex = -1;
    /* 1 px e não display:none: o leitor de PDF do Chrome não imprime quadro escondido. */
    Object.assign(quadro.style, {
      position: "fixed",
      right: "0",
      bottom: "0",
      width: "1px",
      height: "1px",
      border: "0",
      opacity: "0",
      pointerEvents: "none",
    });
    const limpar = () => {
      quadro.remove();
      URL.revokeObjectURL(endereco);
    };
    quadro.onload = () => {
      /* O leitor de PDF termina de montar a página um instante depois do load. */
      window.setTimeout(() => {
        try {
          quadro.contentWindow?.focus();
          quadro.contentWindow?.print();
          resolver();
        } catch (erro) {
          rejeitar(erro instanceof Error ? erro : new Error("Não foi possível imprimir."));
        }
        window.setTimeout(limpar, 60_000);
      }, 500);
    };
    quadro.src = endereco;
    document.body.appendChild(quadro);
  });
}
