-- Loads a specific locale file based on the given locale.
-- If the file is not found, falls back to the default "en" locale.
---@param locale string The desired locale.
---@return string file The content of the loaded locale file.
local function loadLocaleFile(locale)
    local resourceName = GetCurrentResourceName()
    local file = LoadResourceFile(resourceName, ("locales/%s.lua"):format(locale))
    if not file then
        file = LoadResourceFile(resourceName, "locales/en.lua")
        CreateThread(function()
            print(("Locale file \"%s\" not found, falling back to default \"en\"."):format(locale))
        end)
    end
    return file
end

-- Loads the locale data from a file and returns it.
-- Also handles error cases by printing and raising an error.
---@param locale string The desired locale.
---@return table table The loaded locale data.
local function loadLocale(locale)
    local file = loadLocaleFile(locale)
    local data, err = load(file)
    if err then
        print(err)
        error(err)
    end
    return data()
end

-- Loads the default or user-configured locale and stores the data.
locales = loadLocale(Config.Locale or "en")

-- Takes a key and optional arguments, then formats the corresponding localized text.
---@param key string The key to look up in the locale data.
---@return string value The formatted localized text.
function _t(key, ...)
    if locales[key] then
        return locales[key]:format(...)
    end
    return key
end
