// SPDX-FileCopyrightText: 2021 Johannes Loher
// SPDX-FileCopyrightText: 2021 Oliver Rümpelein
// SPDX-FileCopyrightText: 2021 Gesina Schwalbe
// SPDX-FileCopyrightText: 2021 Siegfried Krug
//
// SPDX-License-Identifier: MIT

import { DS4 } from "../config";
import { getGame } from "../utils/utils";

export function registerForSetupHook() {
  Hooks.once("setup", () => {
    localizeAndSortConfigObjects();
  });
}

/**
 * Localizes all objects in {@link DS4.i18n} and sorts them unless they are explicitly excluded.
 */
function localizeAndSortConfigObjects() {
  const noSort = [
    "attributes",
    "combatValues",
    "cooldownDurations",
    "creatureSizeCategories",
    "spellGroups",
    "traits",
    "checkModifiers",
  ];

  /**
   * @template {Record<string, string>} T
   * @param {T} obj               The object to localize
   * @param {boolean} [sort=true] whether or not to sort the object
   * @returns {T} the localized object
   */
  const localizeObject = (obj, sort = true) => {
    const localized = Object.entries(obj).map(([key, value]) => {
      return [key, getGame().i18n.localize(value)];
    });
    if (sort) localized.sort((a, b) => a[1].localeCompare(b[1]));
    return Object.fromEntries(localized);
  };

  DS4.i18n = Object.fromEntries(
    Object.entries(DS4.i18n).map(([key, value]) => {
      return [key, localizeObject(value, !noSort.includes(key))];
    }),
  );
}
