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

import { destinoDoLink } from "./destino-do-link.ts";

/*
  O campo do link do banner é livre: o lojista cola o que tiver na mão. O que
  sai daqui vai direto para o href, então o erro aparece como banner que leva
  para página não encontrada.
*/

test("endereço completo passa como veio", () => {
  assert.deepEqual(destinoDoLink("https://ktalogu.com.br"), { href: "https://ktalogu.com.br", externo: true });
  assert.deepEqual(destinoDoLink("  http://loja.com.br/promo?x=1 "), { href: "http://loja.com.br/promo?x=1", externo: true });
});

test("endereço sem https:// não vira pasta da loja", () => {
  assert.deepEqual(destinoDoLink("www.minhaloja.com.br/promo"), { href: "https://www.minhaloja.com.br/promo", externo: true });
  assert.deepEqual(destinoDoLink("minhaloja.com.br"), { href: "https://minhaloja.com.br", externo: true });
  assert.deepEqual(destinoDoLink("wa.me/5581999999999"), { href: "https://wa.me/5581999999999", externo: true });
  assert.deepEqual(destinoDoLink("//cdn.loja.com/x"), { href: "https://cdn.loja.com/x", externo: true });
});

test("caminho da própria loja continua dentro dela", () => {
  assert.deepEqual(destinoDoLink("/metra/c/canecas"), { href: "/metra/c/canecas", externo: false });
  assert.deepEqual(destinoDoLink("metra/c/canecas"), { href: "/metra/c/canecas", externo: false });
  assert.deepEqual(destinoDoLink("#ofertas"), { href: "#ofertas", externo: false });
});

test("telefone e e-mail valem", () => {
  assert.deepEqual(destinoDoLink("tel:81999999999"), { href: "tel:81999999999", externo: true });
  assert.deepEqual(destinoDoLink("mailto:oi@loja.com.br"), { href: "mailto:oi@loja.com.br", externo: true });
});

test("o que não é endereço de página não vira link", () => {
  assert.equal(destinoDoLink("javascript:alert(1)"), null);
  assert.equal(destinoDoLink("JavaScript:alert(1)"), null);
  assert.equal(destinoDoLink("data:text/html,oi"), null);
  assert.equal(destinoDoLink("promoção de natal"), null);
  assert.equal(destinoDoLink(""), null);
  assert.equal(destinoDoLink(null), null);
  assert.equal(destinoDoLink(undefined), null);
});
