-------------------------------
-- Action timers
-- Mod handling action timers
--

action_timers = {}
action_timers.timers = {}
action_timers.limits = {}

action_timers.api = {}


function action_timers.api.register_timer(name, limit)
	if action_timers.timers[name] then
		minetest.log("error", "[ACTimers] Cannot register timer " .. name .. " a second time")
		return
	elseif not limit then
		minetest.log("error", "[ACTimers] Cannot register timer " .. name .. " without limit")
		return
	end

	action_timers.timers[name] = limit
	action_timers.limits[name] = limit
	minetest.log("action", "[ACTimers] Timer " .. name .. " registered with time limit " .. limit)
end

function action_timers.api.do_action(name, func, params)
	if not action_timers.timers[name] then
		minetest.log("error", "[ACTimers] Timer " .. name .. " doesn't exist")
		return
	elseif not func then
		minetest.log("error", "[ACTimers] Function passed to time checker for " .. name .. " is nil")
		return
	elseif action_timers.timers[name] > 0 then
		minetest.log("error", "[ACTimers] Timer " .. name .. " is still up to 0")
		return action_timers.timers[name]
	end

	action_timers.timers[name] = action_timers.limits[name]
	if not params then
		print("func()")
		return func()
	else
		print("func(unpack(params))")
		return func(unpack(params))
	end
end

function action_timers.api.get_timer(name)
	return action_timers.timers[name]
end

minetest.register_globalstep(function(dtime)
	for name, _ in pairs(action_timers.timers) do
		action_timers.timers[name] = action_timers.timers[name] - dtime
		if action_timers.timers[name] < 0 then
			action_timers.timers[name] = 0
		end
	end
end)

minetest.log("action", "[ACTimers] Loaded")