"use strict";
/**
 * Internationalization (i18n) utilities for StartOS packages.
 *
 * @example
 * ```typescript
 * // In package's i18n/index.ts:
 * import { setupI18n } from '@start9labs/start-sdk'
 * import defaultDict, { DEFAULT_LANG } from './dictionaries/default'
 * import translations from './dictionaries/translations'
 *
 * export const i18n = setupI18n(defaultDict, translations, DEFAULT_LANG)
 * ```
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupI18n = setupI18n;
/**
 * Creates a typed i18n function for a package.
 *
 * @param defaultDict - The default language dictionary mapping strings to numeric indices
 * @param translations - Translation dictionaries for each supported locale
 * @param defaultLang - The default language code (e.g., 'en_US')
 * @returns A typed i18n function that accepts dictionary keys and optional parameters
 */
function setupI18n(defaultDict, translations, defaultLang) {
    const lang = process.env.LANG?.replace(/\.UTF-8$/, '') || defaultLang;
    // Convert locale format from en_US to en-US for Intl APIs
    const intlLocale = lang.replace('_', '-');
    function getTranslation() {
        if (lang === defaultLang)
            return null;
        const availableLangs = Object.keys(translations);
        const match = availableLangs.find((l) => l === lang) ??
            availableLangs.find((l) => String(l).startsWith(lang.split('_')[0] + '_'));
        return match ? translations[match] : null;
    }
    const translation = getTranslation();
    function formatValue(value) {
        if (typeof value === 'number') {
            return new Intl.NumberFormat(intlLocale).format(value);
        }
        if (value instanceof Date) {
            return new Intl.DateTimeFormat(intlLocale).format(value);
        }
        return value;
    }
    return function i18n(key, params) {
        let result = translation
            ? translation[defaultDict[key]]
            : key;
        if (params) {
            for (const [paramName, value] of Object.entries(params)) {
                result = result.replace(`\${${paramName}}`, formatValue(value));
            }
        }
        return result;
    };
}
//# sourceMappingURL=index.js.map