minetest.register_privilege("electoraljudge",  {
	description=modEUrn.translate("Allows you to configure the Electronic Urn."), 
	give_to_singleplayer=false,
})

modEUrn.handler = {
	--[[ ]]
	elected = { 
		president = {
			name = "", --name of the elected candidate.
			when = 0, --when the candidate was elected.
			voters = { }, --names of voters who voted for this elected candidate.
		},
	},
	candidates = { 
		president = { }, --modEUrn.handler.candidates.president[<candidatename>] = <when> | If the candidate has not updated his candidacy for more than 6 months, he loses his candidacy application.
	},
	--]]
	voters = { }, --modEUrn.handler.voters[playername]
}

modEUrn.doSave = function()
	local file = io.open(modEUrn.urlTabela, "w")
	if file then
		file:write(minetest.serialize(modEUrn.handler))
		file:close()
		minetest.log('action',"[E-URN] "..modEUrn.translate("Database saved in file '%s'!"):format(modEUrn.urlTabela))
	else
		minetest.log('error',"[E-URN:ERRO] "..modEUrn.translate("The file '%s' is not in table format!"):format(modEUrn.urlTabela))
	end
end

modEUrn.doLoad = function()
	local file = io.open(modEUrn.urlTabela, "r")
	if file then
		local handler = minetest.deserialize(file:read("*all"))
		file:close()
		if not handler or type(handler) ~= "table" then
			minetest.log('error',"[E-URN:ERRO] "..modEUrn.translate("The file '%s' is not in table format!"):format(modEUrn.urlTabela))
			return { }
		else
			modEUrn.handler = handler
			minetest.log('action',"[E-URN] "..modEUrn.translate("Database '%s' loaded!"):format(modEUrn.urlTabela))
		end
	end
end

modEUrn.on_leaveplayer = function(player)
	local playername = player:get_player_name()
	local now = os.time() --Em milisegundos
	if modEUrn.handler.voters[playername]~=nil and type(modEUrn.handler.voters[playername]) == "table" then
		if modEUrn.handler.voters[playername].times.login~=nil and type(modEUrn.handler.voters[playername].times.login) == "number" and modEUrn.handler.voters[playername].times.login > 0 then
			if modEUrn.handler.voters[playername].times.played~=nil and type(modEUrn.handler.voters[playername].times.played) == "number" and modEUrn.handler.voters[playername].times.played > 0 then
				modEUrn.handler.voters[playername].times.played = modEUrn.handler.voters[playername].times.played + (now - modEUrn.handler.voters[playername].times.login)
			else
				modEUrn.handler.voters[playername].times.played = (now - modEUrn.handler.voters[playername].times.login)
			end
			modEUrn.handler.voters[playername].times.login = 0
			modEUrn.handler.voters[playername].times.logout = now
		end
	else
		minetest.log('error',"[E-URN:ERROR:ONLEAVEPLAYER] "..modEUrn.translate("Impossible to register logout for player '%s' !"):format(dump(player)))
	end
end

minetest.register_on_leaveplayer(function(player)
	modEUrn.on_leaveplayer(player)
	modEUrn.doSave()
end)

--[[
minetest.register_on_newplayer(function(player)

end)
--]]

--[[
minetest.register_on_prejoinplayer(function(name, ip)

end)
--]]

minetest.register_on_joinplayer(function(player)
	local playername = player:get_player_name()
	local now = os.time() --Em milisegundos
	if playername~=nil and type(playername)=="string" and playername~="" then
		if modEUrn.handler.voters[playername]==nil then
			modEUrn.handler.voters[playername] = {
				times ={
					register = now,
					played = 0,
					login = now,
					logout = 0,
				},
			}
		end
		modEUrn.handler.voters[playername].times.login = now
		modEUrn.handler.voters[playername].times.logout = 0
	else
		minetest.log('error',"[E-URN:ERROR:ONJOINPLAYER] "..modEUrn.translate("Impossible to register login for player '%s' !"):format(dump(player)))
	end
end)

minetest.register_on_shutdown(function()
	local players = minetest.get_connected_players()
	if #players >= 1 then
		for _, player in ipairs(players) do
			modEUrn.on_leaveplayer(player)
		end	
	end
	modEUrn.doSave()
	--minetest.log('action',"[E-URN] "..modEUrn.translate("Saving the database from all players in the file '%s'!"):format(modEUrn.urlTabela))
end)