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

import {
  CABECALHO_PADRAO,
  itemNovo,
  mudouANavegacao,
  navegacaoParaGravar,
  problemaDoSlugDaPagina,
  problemasDaNavegacao,
  rascunhoDaNavegacao,
  slugLivre,
} from "./navegacao-da-loja.ts";

test("loja sem nada salvo abre o rascunho padrão e grava tudo em null", () => {
  const rascunho = rascunhoDaNavegacao(null);
  assert.deepEqual(rascunho.cabecalho, CABECALHO_PADRAO);
  assert.equal(rascunho.menu, null);
  assert.equal(rascunho.rodape, null);
  assert.deepEqual(navegacaoParaGravar(rascunho), { cabecalho: null, menu: null, rodape: null });
});

test("ligar o menu próprio sem item não muda nada; com item, muda", () => {
  const base = rascunhoDaNavegacao(null);
  const ligado = { ...base, menu: { itens: [], mostrar_categorias: true } };
  assert.equal(mudouANavegacao(ligado, base), false);
  const comItem = { ...base, menu: { itens: [{ ...itemNovo("inicio") }], mostrar_categorias: true } };
  assert.equal(mudouANavegacao(comItem, base), true);
  assert.ok(navegacaoParaGravar(comItem).menu);
});

test("o que impede publicar: destino sem escolher, endereço ruim, grupo vazio", () => {
  const base = rascunhoDaNavegacao(null);
  const problemas = problemasDaNavegacao({
    ...base,
    menu: {
      mostrar_categorias: true,
      itens: [
        { id: "1", rotulo: "", tipo: "categoria" },
        { id: "2", rotulo: "Site", tipo: "url", url: "javascript:x" },
        { id: "3", rotulo: "Ajuda", tipo: "grupo", filhos: [] },
      ],
    },
    rodape: { colunas: [{ id: "c", titulo: "Loja", links: [{ id: "4", rotulo: "", tipo: "pagina" }] }], sobre: "", mostrar_contato: true, mostrar_redes: true, mostrar_pagamento: true, mostrar_categorias: true },
  });
  assert.equal(problemas.length, 4);
  assert.equal(problemas[3].regiao, "rodape");
});

test("endereço livre e conferência do endereço da página", () => {
  assert.equal(slugLivre("Sobre nós", []), "sobre-nos");
  assert.equal(slugLivre("Sobre nós", ["sobre-nos", "sobre-nos-2"]), "sobre-nos-3");
  assert.equal(problemaDoSlugDaPagina("sobre-nos", ["sobre-nos"]), "Já existe uma página com esse endereço.");
  assert.equal(problemaDoSlugDaPagina("Sobre", []), "Use só letras minúsculas, números e hífen.");
  assert.equal(problemaDoSlugDaPagina("trocas", []), null);
});
