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

import { chaveDoCodigo, lerListaDeCodigos, mascararCodigo, situacaoDoEstoque } from "./codigos.ts";

test("um código por linha, sem vazios nem repetidos (maiúsculas e espaços não contam)", () => {
  const lido = lerListaDeCodigos("AAA-111\n\n  aaa-111  \nBBB-222\r\nCCC-333\n");
  assert.deepEqual(lido.codigos, ["AAA-111", "BBB-222", "CCC-333"]);
  assert.equal(lido.repetidosNoTexto, 1);
  assert.equal(lido.grandesDemais, 0);
});

test("planilha em CSV: primeira coluna, sem a linha de título", () => {
  const csv = 'Código;Cliente\n"XYZ-1";Ana\nXYZ-2;Bia\n"XYZ-3"\n';
  assert.deepEqual(lerListaDeCodigos(csv).codigos, ["XYZ-1", "XYZ-2", "XYZ-3"]);
  assert.deepEqual(lerListaDeCodigos("codes\nK1\nK2").codigos, ["K1", "K2"]);
});

test("código grande demais fica de fora e é contado", () => {
  const lido = lerListaDeCodigos(`${"x".repeat(501)}\nOK-1`);
  assert.deepEqual(lido.codigos, ["OK-1"]);
  assert.equal(lido.grandesDemais, 1);
});

test("máscara, chave e situação do estoque", () => {
  assert.equal(mascararCodigo("AURO-7K2M-Q9FX"), "•••• Q9FX");
  assert.equal(mascararCodigo("abc"), "••••");
  assert.equal(chaveDoCodigo("  ab-c  "), "AB-C");
  assert.equal(situacaoDoEstoque(0, 5), "esgotado");
  assert.equal(situacaoDoEstoque(5, 5), "acabando");
  assert.equal(situacaoDoEstoque(6, 5), "ok");
  assert.equal(situacaoDoEstoque(1, 0), "ok");
});
