local base = _G
require("string")
require("table")

module("config")

settings = {}

function loadFunction(fct)
	local old_mt = base.getmetatable(settings)
	local loader = { active = true }
	base.setmetatable(settings,
	{
		__index = function(table, key)
			local t = {}
			base.setmetatable(t, base.getmetatable(table))
			if loader.active and base.rawget(table, key) == nil then base.rawset(table, key, t) end
			return base.rawget(table, key)
		end,
	})

	base.setfenv(fct, settings)
	local ret, err = base.pcall(fct)
	loader.active = false

	if ret then return true
	else return false, err end
end

function loadString(str)
	local fct = base.loadstring(str)
	if fct then
		return loadFunction(fct)
	end
	return nil, "Could not load string"
end

function loadFile(file)
	local fct = base.loadfile(file)
	if fct then
		return loadFunction(fct)
	end
	return nil, "Could not load file"
end

load = loadFile
