// 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 "../helpers";

export default function registerForSetupHooks(): void {
    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",
        "spellCategories",
        "traits",
        "checkModifiers",
    ];

    const localizeObject = <T extends { [s: string]: string }>(obj: T, sort = true): T => {
        const localized = Object.entries(obj).map(([key, value]): [string, string] => {
            return [key, getGame().i18n.localize(value)];
        });
        if (sort) localized.sort((a, b) => a[1].localeCompare(b[1]));
        return Object.fromEntries(localized) as T;
    };

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