import { inject, provide, ref } from 'vue';

interface Language {
    [key: string]: string;
}

interface Config {
    locale: string;
    messages: {[key: string]: Language};
}

const createI18n = (config: Config) => ({
    locale: ref(config.locale),
    messages: config.messages,
    $t(key: string) {
        // console.log(key)
        return this.messages[this.locale.value][key];
    },
    $s(){
        return this.locale.value
    }
});

const i18nSymbol = Symbol();
let i18n: any;
export function provideI18n(i18nConfig: Config) {
    i18n = createI18n(i18nConfig);
    provide(i18nSymbol, i18n);
    return i18n;
}

export function useI18n() {
    const i18n = inject(i18nSymbol);
    if (!i18n) throw new Error("No i18n provided!!!");

    return i18n;
}

export function geti18n(){
    return i18n;
}