-- chatbox.tell("player","message","nom",distance,verticalLimit)
-- chatbox.say(message,nom,distance,verticalLimit)
-- chatbox.add("nomDeLaCommande",Fonction(args,player),"informationSurLaCommande")

local listeCommand={}
local messages={}
local timerEncour=false
local timerFc=nil

-- Parametre
local interval=3.5
local paramsDef={
	nom="Alfred",
	distance=9999,
	verticalLimit=false
}

pp=peripheral.find("chatBox")

local param=function(args)
	local params=paramsDef
	if not(args[1]==nil) then
		params.nom=args[1]
	end
	if not(args[2]==nil) then
		params.distance=args[2]
	end
	if not(args[3]==nil) then
		params.verticalLimit=args[3]
	end
	return params
end
local envois=function(commande,message,params,player)
	if commande=="tell" then
		pp.tell(player,message,params.distance,params.verticalLimit,params.nom)
	else
		pp.say(message,params.distance,params.verticalLimit,params.nom)
	end
	if not(interval==0) then
		timerEncour=true
		timerFc=os.startTimer(interval)
	end
end
local traitement=function(commande,message,params,player)
	if interval==0 then
		envois(commande,message,params,player)
		return
	end
	if timerEncour then
		table.insert(messages,{
			commande=commande,
			player=player,
			message=message,
			params=params
		})
	else
		envois(commande,message,params,player)		
	end
end





function tell(player,message,...)
	traitement("tell",message,param({ ... }),player)
end
function say(message,...)
	traitement("say",message,param({ ... }),"")
end
-- 
function add(commande,call,info)	
	listeCommand[commande]={
		call=call,
		info=info
	}
end

function help(args,player)
	if listeCommand[args[2]] then
		tell(player,args[2].." : "..listeCommand[args[2]].info)
	else
		tell(player,"Cette commande ("..tostring(args[2])..") n'existe pas")
	end
end
function reboot(args,player)
	os.reboot()
end

add("help",help,"\\help NOMDELACOMMANDE Affiche des infos sur les commandes")
--add("reboot",reboot,"\\reboot - Me fait redemarer")

function initCommand()
	while true do
		local event, player, args = os.pullEvent("command") 	
		if listeCommand[args[1]] then
			listeCommand[args[1]].call(args,player)
		else
			texte=""
			for k,v in pairs(listeCommand) do
				if not(texte=="") then
					texte=texte..", "
				end
				texte=texte..k
			end
			tell(player,"Je ne connais pas cette commande, je vais vous donnez toutes les commandes")
			tell(player,texte)
		end
	end
end
function initTell()
	while not(interval==0) do
		local event, completed = os.pullEvent("timer")
		if completed == timerFc then
			if #messages==0 then
				timerEncour=false
			else
				envois(messages[1].commande,messages[1].message,messages[1].params,messages[1].player)
				table.remove(messages,1)
			end			
		end
	end
end