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

import type { Translation } from "../types/translation-types";
import { searchTranslationLabels } from "./translation-label-search";

function label(id: number, englishText: string, khmerText: string): Translation {
  return {
    id,
    translationKey: `key.${id}`,
    englishText,
    khmerText,
    module: "pswg",
    page: "progress_report",
    parentId: null,
    isActive: true,
    createdAt: "",
    updatedAt: "",
  };
}

test("search puts exact labels before prefix and containing matches", () => {
  const labels = [
    label(1, "Review Progress Report", "ពិនិត្យរបាយការណ៍វឌ្ឍនភាព"),
    label(2, "Progress Report Review", "របាយការណ៍វឌ្ឍនភាពសម្រាប់ពិនិត្យ"),
    label(3, "Progress Report", "របាយការណ៍វឌ្ឍនភាព"),
    label(4, "Other", "ផ្សេងទៀត"),
  ];

  assert.deepEqual(
    searchTranslationLabels(labels, "របាយការណ៍វឌ្ឍនភាព").map(({ id }) => id),
    [3, 2, 1],
  );
  assert.deepEqual(
    searchTranslationLabels(labels, "progress report").map(({ id }) => id),
    [3, 2, 1],
  );
  assert.equal(searchTranslationLabels(labels, " "), labels);
});
