import { app } from "electron"
import { get } from "lodash-es"

import zh from "./languages/zh.json"
import en from "./languages/en.json"

type FlattenObject<T, Prefix extends string = ""> = T extends object
    ? {
          [K in keyof T & (string | number)]: FlattenObject<T[K], Prefix extends "" ? `${K}` : `${Prefix}.${K}`>
      }[keyof T & (string | number)]
    : Prefix

type FlattenKeys<T> = FlattenObject<T>

type TranslationKey = FlattenKeys<typeof zh>

class Locale {
    locale: string = "en"

    constructor() {
        try {
            this.locale = app.getLocale()
        } catch (e) {
            console.log(e)
        }
    }

    isCN(): boolean {
        return this.locale.startsWith("zh")
    }

    t(key: TranslationKey): string {
        return this.isCN() ? get(zh, key) : get(en, key)
    }
}

const Locales = new Locale()
export default Locales
export { Locales }