import assert from "node:assert/strict";
import test from "node:test";

import { codigoDigitado, dataPorExtenso, novoCodigoDoCertificado, paraWinAnsi, prefixoDoCertificado } from "./certificado.ts";
import { pdfDoCertificado } from "./servidor/pdf-do-certificado.ts";

test("certificado: o código tem a loja, o ano e 8 letras sem confusão", () => {
  assert.equal(prefixoDoCertificado("Escola Aurora"), "ESC");
  assert.equal(prefixoDoCertificado("Ótima Gráfica"), "OTI");
  assert.equal(prefixoDoCertificado("123"), "CRT");
  const codigo = novoCodigoDoCertificado("Aurora", 2026, Uint8Array.from([0, 1, 2, 3, 4, 5, 6, 7]));
  assert.equal(codigo, "AUR-2026-ABCD-EFGH");
  assert.match(novoCodigoDoCertificado("Aurora", 2026), /^AUR-2026-[A-HJ-NP-Z2-9]{4}-[A-HJ-NP-Z2-9]{4}$/);
  assert.equal(codigoDigitado(" aur-2026-abcd-efgh "), "AUR-2026-ABCD-EFGH");
  assert.equal(codigoDigitado("x<script>"), null);
});

test("certificado: o texto do PDF perde só o que a fonte não tem", () => {
  assert.equal(paraWinAnsi("Ana  Conceição 🎉 – Curso “Prensa”"), "Ana Conceição – Curso “Prensa”");
  assert.equal(dataPorExtenso("2026-10-10T15:00:00.000Z"), "10 de outubro de 2026");
});

test("certificado: o PDF sai inteiro, mesmo com nome comprido e sem assinatura", async () => {
  const bytes = await pdfDoCertificado({
    loja: "Escola Aurora",
    cor: "#F26B1D",
    aluno: "Maria Aparecida dos Santos Conceição de Albuquerque Figueiredo",
    curso: "Sublimação do zero ao lucro: canecas, camisetas, azulejos e tudo o que vende na sublimação com prensa 5 em 1",
    cargaHoraria: "6h 40min",
    emitidoEm: "2026-10-10T15:00:00.000Z",
    codigo: "AUR-2026-ABCD-EFGH",
    endereco: "https://ktalogu.com.br/aurora/certificado/AUR-2026-ABCD-EFGH",
    assinatura: null,
  });
  assert.equal(Buffer.from(bytes.slice(0, 5)).toString("latin1"), "%PDF-");
  assert.ok(bytes.length > 1500);
});
