import assert from "node:assert/strict";
import test from "node:test";
import { formatTranslationPageNumber, getTranslationPaginationItems } from "./translation-pagination";

test("translation pagination keeps the current page reachable in large page sets", () => {
  assert.deepEqual(getTranslationPaginationItems(1, 34), [1, 2, 3, "ellipsis", 34]);
  assert.deepEqual(getTranslationPaginationItems(17, 34), [1, "ellipsis", 16, 17, 18, "ellipsis", 34]);
  assert.deepEqual(getTranslationPaginationItems(34, 34), [1, "ellipsis", 32, 33, 34]);
  assert.deepEqual(getTranslationPaginationItems(4, 4), [1, 2, 3, 4]);
  assert.deepEqual(getTranslationPaginationItems(99, 3), [1, 2, 3]);
});

test("translation pagination renders digits in the selected language", () => {
  assert.equal(formatTranslationPageNumber(34, "en"), "34");
  assert.equal(formatTranslationPageNumber(34, "km"), "៣៤");
});

test("pagination digits do not depend on runtime Intl support", (context) => {
  context.mock.method(Intl, "NumberFormat", function () {
    throw new Error("Khmer numbering is unavailable in this runtime");
  });
  assert.equal(formatTranslationPageNumber(1, "km"), "១");
  assert.equal(formatTranslationPageNumber(102, "km"), "១០២");
  assert.equal(formatTranslationPageNumber(102, "en"), "102");
});
