-- Research Timer by hisdad
-- v1


local function SortTimeA (a,b)
  return RT.SV.data.Craft[a].shortest < RT.SV.data.Craft[b].shortest
end

function RT.Init(eventCode, addOnName)

	if(addOnName == RT.name) then
		RT.Init_done = false
		RT.playername = GetUnitName("player")

	    -- SavedVariables
	  RT.SV.data = ZO_SavedVars:NewAccountWide(RT.name, 1, nil, nil )
	  if RT.SV.data.Craft == nil
		then RT.SV.data.Craft = {}
			 RT.SV.data.Craft[RT.playername]= {}
		else RT.GRID_Remove_Expired()
	  end
		RT.InitialiseLanguage()

	    -- Slash commands
	  SLASH_COMMANDS[RT.cmdsetup] = RT.CommandText_setup

      -- Default sort
		RT.SortFunction = SortTimeA

	    -- Create Keybinds
	  ZO_CreateStringId("SI_BINDING_NAME_RT_toggleGRID", "|c96FF00Toggle GRID|r")

		local timestamp = GetTimeStamp()

		RT.SV.data.Craft[RT.playername] = {}
		RT.SV.data.Craft[RT.playername]["Start"] = true

		RT.Collect_Data()
		RT.GRID_Create()
		RT.Init_done = true
		-- Only after initialised do we hook any other events.
		EVENT_MANAGER:RegisterForEvent(RT.name, EVENT_SMITHING_TRAIT_RESEARCH_STARTED, RT.Research_started)
	end
end

function RT.toggleGRID()
	if (RT.UI.GRID_TLW:IsHidden() == true) then
	RT.GRID_Sort()
	RT.UI.GRID_TLW:SetHidden(false)
	else
	RT.UI.GRID_TLW:SetHidden(true)
	end
end

function RT.Converthms(timesec)

    local days = 0
    local hours = 0
    local minutes = 0
    local seconds = 0
    local humanDuration

    local function extractIntegerUnits(sec, unitduration)
        local units = math.floor(sec / unitduration)
        return units, sec - (units * unitduration)
    end


    days, timesec = extractIntegerUnits(timesec, 60*60*24)
    hours, timesec = extractIntegerUnits(timesec, 60*60)
    minutes, seconds = extractIntegerUnits(timesec, 60)



    humanDuration = string.format("%d:%02d", hours, minutes)
        if (days > 0) then
            humanDuration = string.format("%dd ", days)..humanDuration
        end

  return humanDuration
end


function RT.CommandText_setup()
		RT.toggleGRID()
end

EVENT_MANAGER:RegisterForEvent(RT.name, EVENT_ADD_ON_LOADED, RT.Init)