-- Craft Research Timer (CRT) by @aTo (EU)
-- v0.4.11


function CRT.Collect_Data()
	CRT.SV.data.Craft[CRT.playername].shortest = 99999999 -- for this player find next due.
	CRT.Info_Research(CRAFTING_TYPE_BLACKSMITHING, 0)
	CRT.Info_Research(CRAFTING_TYPE_CLOTHIER, 1)
	CRT.Info_Research(CRAFTING_TYPE_WOODWORKING, 2)
end


function CRT.Info_Research(craft_type,id_craft)
	local Simu_craft = 0
	local ResearchLines, ResearchTrait
	local MaxResearch = GetMaxSimultaneousSmithingResearch(craft_type)
	local nbtype = GetNumSmithingResearchLines(craft_type) --Nombre de item craftable pour un craft(ex couture: jambe/robe/ect)

	CRT.SV.data.Craft[CRT.playername][id_craft] = {}

	for ResearchLines = 1, nbtype, 1 do
		local item_name, item_icon, numTraits, timeRequiredForNextResearchSecs = GetSmithingResearchLineInfo(craft_type, ResearchLines)
		for ResearchTrait = 1, numTraits, 1 do
			local duration, timeRemaining = GetSmithingResearchLineTraitTimes(craft_type, ResearchLines, ResearchTrait)

			if (duration ~= nil and timeRemaining ~= nil) then

				Simu_craft = Simu_craft + 1


			local traitType, trait_description, _ = GetSmithingResearchLineTraitInfo(craft_type,ResearchLines,ResearchTrait)
			local _, trait_name, trait_icon, _, _, _, _ = GetSmithingTraitItemInfo(traitType+1)



			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft] = {}
			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft]["PlayerName"] = CRT.playername
			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft]["Alert"] = true
			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft]["EndTimeStamp"] = GetTimeStamp() + timeRemaining
			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft]["Item_name"] = string.sub(item_name, 1, 18)
			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft]["Item_icon"] = item_icon
			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft]["Trait_name"] = trait_name
			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft]["Trait_icon"] = trait_icon
			CRT.SV.data.Craft[CRT.playername][id_craft][Simu_craft]["Trait_description"] = trait_description

			if CRT.SV.data.Craft[CRT.playername].shortest > timeRemaining
				then CRT.SV.data.Craft[CRT.playername].shortest = timeRemaining
			end
				--	d("Type de craft :"..id_craft.." nom de l'item :"..name.." temps restant :"..temp_timer[Simu_craft])
			end
		end
	end
	CRT.SV.data.Craft[CRT.playername][id_craft]["MaxResearch"] = MaxResearch
	CRT.SV.data.Craft[CRT.playername][id_craft]["Simu_craft"] = Simu_craft
end

function CRT.Char_sort()    -- Produce a sorted list for display
  CRT.CharsInOrder = {}
  for k, _ in pairs(CRT.SV.data.Craft) do
			table.insert(CRT.CharsInOrder,k)
	end
  if CRT.SortFunction ~= nil then
    table.sort(CRT.CharsInOrder, CRT.SortFunction)
  end
end
function CRT.Research_started()

		-- erase all data for this character
		CRT.SV.data.Craft[CRT.playername] = {}
		-- Collect new data
		CRT.Collect_Data()

		if (CRT.UI.GRID_WD[CRT.playername] == nil) then
			CRT.GRID_Create_Character(CRT.playername)
		end
    CRT.Char_sort()
end