-- Craft Research Timer (CRT) by @aTo (EU)
-- v0.4.11
RT = {
	name = "ResearchTimer",
	font = "ZoFontGame",
	cmdsetup = "/rt",
	svName = "ResearchTimer",
	version = "v1",
	playername = "",
	font = "ZoFontGame",
	interval = 20,
	width = 100,
	height = 80,
	UI = {},
	SV={},
	collect=0
}


RT.UI.GRID_TLW = {}
RT.UI.GRID_BD = {}
RT.UI.GRID_WD = {}
RT.UI.GRID_BTN = {}


function RT.Collect_Data()
	RT.Info_Research(CRAFTING_TYPE_BLACKSMITHING, 0)
	RT.Info_Research(CRAFTING_TYPE_CLOTHIER, 1)
	RT.Info_Research(CRAFTING_TYPE_WOODWORKING, 2)
end


function RT.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)

	RT.SV.data.Craft[RT.playername][id_craft] = {}
	RT.SV.data.Craft[RT.playername][id_craft].doing = {}
	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)



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

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

-- for each character, find the research completing soonest and set RT.SV.data.Craft[Char].shortest
function RT.Set_Shortest()
	local char,craft,shortest, remaining,v
	for char,_ in pairs (RT.SV.data.Craft) do

		shortest = 9999999999
		for craft =0,2, 1 do
			for _,v in pairs (RT.SV.data.Craft[char][craft].doing) do
				remaining = v["EndTimeStamp"] - GetTimeStamp()
				if shortest > remaining
				then shortest = remaining
				end
			end
		end
		RT.SV.data.Craft[char].shortest = shortest
	end
end

function RT.Research_started()  -- Triggered by Event
		-- erase all data for this character
		RT.SV.data.Craft[RT.playername] = {}
		-- Collect new data
		RT.Collect_Data()

		if (RT.UI.GRID_WD[RT.playername] == nil) then
			RT.GRID_Create_Character(RT.playername)
		end
		RT.Set_Shortest()
		RT.UI.GRID_WD[RT.playername].label:SetText(string.upper(RT.playername)) -- remove highlighting
end