local registerFeature = function()
	local feature = {}
	feature.Name = "TextManager"

	feature.Description = "A little texts manager"
	feature.Components=
	{
		{
			Name="TextManager",
			Prop=
				{
					{Name="InstanceId",Type="String"},
					{Name="Texts",Type="Table"},
				}
		},
		{
			Name="TextManagerEntry",
			Prop=
				{	
					{Name="InstanceId", Type="String" },
					{Name="Text",Type="String"},
					{Name="Count",Type="Number"}
				}
		}

	}


	--returns nil if the text is still in the textManager
	--else, return a new entry, not inserted in the TextManager
	feature.checkText = function(textManager,text)
		local texts = r2.Scenario.Texts.Texts
		k,entry = next(texts,nil)
		while k ~=nil do
			local textEntry = entry.Text
			if textEntry==text
			then
				return entry
			end
			k,entry = next(texts,k)
		end
		entry = r2.newComponent("TextManagerEntry")
		entry.Text=text
		entry.Count=0
		return entry
	end

	feature.getText = function (textManager, entry)

		debugInfo("feature.getText")

		for i=0, textManager.Texts.Size-1 do

			local text = textManager.Texts[i]

			if text.InstanceId == entry
			then
				return text.Text
			end
		end
		return nil
	end

	--add a text to the text manager.
	--if the text exist, increment its counter
	feature.addText = function(textManager,text)
		local max = table.getn(textManager.Texts)
		local entry 
		
		for i=1,max do
			entry = textManager.Texts[i]
			if entry.Text==text
			then
				entry.Count = entry.Count+1 
				return entry
			end
		end

		entry = r2.newComponent("TextManagerEntry")
		entry.Text=text
		entry.Count=1
		table.insert(textManager.Texts,entry)
		return entry
	end

	--decrement the counter of a text.
	--if this counter==0, remove the text from the TextManager	
	feature.removeText = function(textManager, text)

		for i=0,textManager.Texts.Size-1  do
			local entry = textManager.Texts[i]
			if entry.Text==text then

				local newCount = entry.Count-1
				
				if newCount==0 then
					r2.requestEraseNode(entry.InstanceId, "", -1)
				else
					r2.requestSetNode(entry.InstanceId, "Count", newCount)
				end
			end
		end
	end	

	

	feature.Translator = function(context)
		local comp = context.Feature
		local texts = context.Feature.Texts
		local entry
		local rtTextMgr = context.RtScenario.Texts
		--for each entry
		local k,v = next(texts,nil)
		while v~=nil do
			if k~="Keys"
			then
				--create and fill a RT entry
				entry = r2.newComponent("RtEntryText")
				entry.Text = v.Text
				--insert it in the RT text manager
				table.insert(rtTextMgr.Texts,entry)
				local tmp = {}
				table.insert(tmp,v.InstanceId)
				table.insert(tmp,entry.Id)
				table.insert(context.TextTranslateId,tmp)
			end
			k,v = next(texts,k)
		end
		if table.getn(context.TextTranslateId)==0
		then
			debugInfo("translator:: pas d'entrees dans la table!!!")
		end
	end

	-- ?
	feature.getRtId = function(context, instanceId)
		local tab = context.TextTranslateId
		assert(tab~=nil)
		for k,v in pairs(tab)
		do	
			if instanceId == v[1]
			then
				return v[2]
			end
		end
		local max = table.getn(tab)
		if max==0
		then
			debugInfo(colorTag(255, 255, 0).."WAR: The text table is empty.")
			return
		end

		for i=1,max do
			if instanceId == tab[i][1]
			then			
				return tab[i][2]
			end
		end
	end

	return feature
end

r2.Features["TextManager"] = registerFeature()