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

import { corDeDestaque, enderecoDasFontes, FONTES_DOS_TITULOS, lerAparencia, textoSobre, variaveisDaArea } from "./aparencia.ts";

test("aparência: o que veio do banco vira escolha válida", () => {
  assert.deepEqual(lerAparencia({}), { fonte: "cinema", fundo: "preto", capas: "em_pe" });
  assert.deepEqual(lerAparencia({ aparencia: "clara" }), { fonte: "cinema", fundo: "claro", capas: "em_pe" });
  assert.deepEqual(lerAparencia({ fonte: "elegante", fundo: "azul", capas: "deitada" }), { fonte: "elegante", fundo: "azul", capas: "deitada" });
  assert.deepEqual(lerAparencia({ fonte: "comic-sans", fundo: "rosa", capas: "torta" }), { fonte: "cinema", fundo: "preto", capas: "em_pe" });
  assert.equal(new Set(FONTES_DOS_TITULOS.map((f) => f.id)).size, FONTES_DOS_TITULOS.length);
});

test("aparência: cor apagada vira a laranja; texto legível em cima", () => {
  assert.equal(corDeDestaque("#7c3aed"), "#7C3AED");
  assert.equal(corDeDestaque("#777777"), "#FF5A1F");
  assert.equal(corDeDestaque("#0a0a0a"), "#FF5A1F");
  assert.equal(corDeDestaque(null), "#FF5A1F");
  assert.equal(textoSobre("#FFC21A"), "#111014");
  assert.equal(textoSobre("#7C3AED"), "#FFFFFF");
});

test("aparência: variáveis e endereço das fontes", () => {
  const vars = variaveisDaArea({ aparencia: { fonte: "classico", fundo: "claro", capas: "deitada" }, cor: "#2563ff" });
  assert.equal(vars["--m-acento"], "#2563FF");
  assert.equal(vars["--m-fundo"], "#F4F2EE");
  assert.equal(vars["--m-titulo-estilo"], "italic");
  assert.equal(vars["--m-capa-proporcao"], "16 / 10");
  const endereco = enderecoDasFontes(["cinema", "classico"]);
  assert.ok(endereco.startsWith("https://fonts.googleapis.com/css2?family=Archivo"));
  assert.ok(endereco.includes("family=Fraunces"));
  assert.equal(endereco.match(/family=Archivo/g)?.length, 1);
});
