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

import { aplicarPedidoDoBloco, faltaNoBloco } from "./ferramentas/loja-estrutura-blocos.ts";
import { modoPeloNome } from "./ferramentas/loja-estrutura-regras.ts";

const ID = "11111111-1111-1111-1111-111111111111";

test("o assistente acha os blocos novos pelo nome", () => {
  assert.equal(modoPeloNome("oferta relâmpago"), "flash_offer");
  assert.equal(modoPeloNome("cupom em destaque"), "coupon_highlight");
  assert.equal(modoPeloNome("perguntas frequentes"), "faq");
  assert.equal(modoPeloNome("imagem com pontos"), "shoppable_image");
  assert.equal(modoPeloNome("antes e depois"), "before_after");
  assert.equal(modoPeloNome("faixa que desliza"), "marquee");
  assert.equal(modoPeloNome("banner de imagem"), "image_banner");
  assert.equal(modoPeloNome("mais vendidos"), "featured_products");
});

test("pedido do bloco: campos do tipo, formatos conferidos", () => {
  const ruim = aplicarPedidoDoBloco("faq", {}, { video: "https://youtu.be/dQw4w9WgXcQ" });
  assert.equal(ruim.ok, false);
  const oferta = aplicarPedidoDoBloco("flash_offer", { mode: "flash_offer" }, { produtos: [ID.toUpperCase()], termina_em: "2026-10-20 18:00" });
  assert.ok(oferta.ok);
  if (!oferta.ok) return;
  assert.deepEqual(oferta.pedido.config.produtos, [ID]);
  assert.equal(oferta.pedido.config.termina_em, "2026-10-20T18:00");
  assert.deepEqual(oferta.pedido.produtos, [ID]);
  assert.equal(aplicarPedidoDoBloco("flash_offer", {}, { termina_em: "amanhã" }).ok, false);
  const pontos = aplicarPedidoDoBloco("shoppable_image", {}, { pontos: [{ x: 120, y: 30.55, produto: ID }], imagem: "https://a.com/x.png" });
  assert.ok(pontos.ok);
  if (!pontos.ok) return;
  assert.deepEqual(pontos.pedido.config.pontos, [{ x: 100, y: 30.6, produto_id: ID }]);
  assert.deepEqual(pontos.pedido.imagens, [{ campo: "imagem", valor: "https://a.com/x.png" }]);
  assert.equal(faltaNoBloco("shoppable_image", pontos.pedido.config, ["imagem"]), null);
  assert.match(String(faltaNoBloco("shoppable_image", pontos.pedido.config, [])), /imagem/);
  const faixa = aplicarPedidoDoBloco("marquee", {}, { frases: ["a", " ", "b"], cor_de_fundo: "vermelho" });
  assert.equal(faixa.ok, false);
});
