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

import { normalizarNome, semelhanca, sugerirInsumo, type InsumoParaCasar } from "./fornecedores/casar-insumo.ts";

const catalogo: InsumoParaCasar[] = [
  { id: "1", name: "Papel Couché 250g" },
  { id: "2", name: "Vinil Adesivo Branco" },
  { id: "3", name: "Tinta Eco Solvente Ciano" },
  { id: "4", name: "Lona Front 440g" },
  { id: "5", name: "Ilhós 10mm", is_active: false },
];

test("normalizar tira acento, pontuacao e caixa", () => {
  assert.equal(normalizarNome("Papel Couché 250g"), "papel couche 250g");
  assert.equal(normalizarNome("  ILHÓS 10mm!  "), "ilhos 10mm");
  assert.equal(normalizarNome(null), "");
});

test("nome identico com acento diferente e sugestao de confianca alta", () => {
  const s = sugerirInsumo("papel couche 250g", catalogo);
  assert.equal(s?.insumo.id, "1");
  assert.equal(s?.confianca, "alta");
});

test("nome contido no outro e confianca media", () => {
  const s = sugerirInsumo("Couché 250g", catalogo);
  assert.equal(s?.insumo.id, "1");
  assert.equal(s?.confianca, "media");
});

test("palavras em comum bastam para apontar, com confianca menor", () => {
  const s = sugerirInsumo("Vinil Branco Adesivo Rolo", catalogo);
  assert.equal(s?.insumo.id, "2");
  assert.ok(s?.confianca === "media" || s?.confianca === "baixa");
});

test("nome sem nada a ver nao sugere nada", () => {
  assert.equal(sugerirInsumo("Cafe em po", catalogo), null);
  assert.equal(sugerirInsumo("", catalogo), null);
});

test("insumo desativado fica fora da sugestao", () => {
  assert.equal(sugerirInsumo("Ilhós 10mm", catalogo), null);
});

test("palavra de ligacao nao conta como parecido", () => {
  /* "Tinta de lona" e "Lona Front 440g" dividem so "lona"; com "de" contando,
     a nota subiria o suficiente para sugerir errado. */
  assert.ok(semelhanca("Tinta de lona", "Lona Front 440g") < 0.5);
});

test("a nota e simetrica e vale 1 para nomes iguais", () => {
  assert.equal(semelhanca("Lona Front 440g", "Lona Front 440g"), 1);
  assert.equal(semelhanca("Vinil Adesivo", "Adesivo Vinil"), semelhanca("Adesivo Vinil", "Vinil Adesivo"));
});
