--[[

	TechAge
	=======

	Copyright (C) 2019-2021 Joachim Stolberg

	AGPL v3
	See LICENSE.txt for more information

	Count techage commands player related
	
]]--

local PlayerName
local PlayerPoints = {}
local LastPlayerPoints = {}
local S = techage.S

local MAX_POINTS = tonumber(minetest.settings:get("techage_command_limit")) or 1200

function techage.counting_start(player_name)
	PlayerName = player_name
	PlayerPoints[PlayerName] = PlayerPoints[PlayerName] or 0
end

function techage.counting_stop()
	PlayerName = nil
end

function techage.counting_hit()
	if PlayerName then
		PlayerPoints[PlayerName] = PlayerPoints[PlayerName] + 1
	end
end

function techage.counting_add(player_name, points)
	PlayerPoints[player_name] = (PlayerPoints[player_name] or 0) + points
end

local function output()
	for name, val in pairs(PlayerPoints) do
		if val > MAX_POINTS then
			local obj = minetest.get_player_by_name(name)
			if obj then
				minetest.chat_send_player(name, 
					S("[techage] The limit for 'number of commands per minute' has been exceeded.") ..
					" " .. string.format(MAX_POINTS .. " " .. S("is allowed. Current value is") .. " " .. val));
				minetest.log("action", "[techage] " .. name .. 
					" exceeds the limit for commands per minute. value = " .. val)
				local factor = 100 / (obj:get_armor_groups().fleshy or 100)
				obj:punch(obj, 1.0, {full_punch_interval=1.0, damage_groups = {fleshy=factor * 5}})
			end
		end
	end
	LastPlayerPoints = table.copy(PlayerPoints)
	PlayerPoints = {}
	minetest.after(60, output)
end

minetest.after(60, output)


minetest.register_chatcommand("ta_limit", {
	description = "Get your current techage command limit value",
    func = function(name)
		local num = LastPlayerPoints[name] or 0
		return true, S("Your current value is") .. " " .. num .. " " .. S("per minute") .. ". " .. 
			MAX_POINTS .. " " .. S("is allowed")
    end
})