import i18n from 'sveltekit-i18n';

import type { Config } from 'sveltekit-i18n'
import type {
    GenericImport,
    StructuredLocfileInfo,
    LocalizationContent
} from '$lib/types/i18n';

import languages from '$i18n/languages.json';

const locFiles = import.meta.glob('$i18n/*/**/*.json');
const parsedLocfiles: StructuredLocfileInfo = {};

for (const [ path, loader ] of Object.entries(locFiles)) {
    const [,, lang, ...keyComponents ] = path.split('/');
    const key = keyComponents.map(k => k.replace('.json', '')).join('.');
    parsedLocfiles[lang] = {
        ...parsedLocfiles[lang],
        [key]: loader as GenericImport
    };
}

const defaultLocale = 'en';
const config: Config = {
    fallbackLocale: defaultLocale,
    translations: Object.keys(parsedLocfiles).reduce((obj, lang) => {
        return {
            ...obj,
            [lang]: { languages }
        }
    }, {}),
    loaders: Object.entries(parsedLocfiles).map(([ lang, keys ]) => {
        return Object.entries(keys).map(([ key, importer ]) => {
            return {
                locale: lang,
                key,
                loader: () => importer().then(
                    l => l.default as LocalizationContent
                )
            }
        });
    }).flat()
};

export { defaultLocale };
export const {
    t, loading, locales, locale, translations,
    loadTranslations, addTranslations, setLocale, setRoute
} = new i18n(config);
