local fm = FarmManager
local classes = fm.classes
local window = FarmManagerWindow
local itemList = {}
local totalFarmed = 0

classes.FarmManagerMainWindow = ZO_Object:Subclass()

local function ToGold(amount)
	return ZO_CurrencyControl_FormatCurrencyAndAppendIcon(amount, false, CURT_MONEY, false)
end

function classes.FarmManagerMainWindow:New(...)
    local object = ZO_Object.New(self)
    object:Init(...)
    return object
end

function classes.FarmManagerMainWindow:Init()
    itemList = window:GetNamedChild("DetailPanel"):GetNamedChild("ItemList")
    ZO_ScrollList_AddDataType(itemList, 1, "FarmManagerGUIItemListItemTemplate", 30, function(control, data) self:UpdateDataRow(control, data) end)
end

function classes.FarmManagerMainWindow:Show()
    window:SetHidden(false)
end

function classes.FarmManagerMainWindow:Hide()
    window:SetHidden(true)
end

function classes.FarmManagerMainWindow:UpdateDataRow(control, data)
	control:GetNamedChild("Icon"):SetTexture(data.texture)
	control:GetNamedChild("NameLabel"):SetText(zo_strformat('<<t:1>>', data.itemLink))
	control:GetNamedChild("CountsLabel"):SetText(data.quantityFarmed)
    control:GetNamedChild("PriceLabel"):SetText(ToGold(math.floor(data.totalValueFarmed)))
    window:GetNamedChild("TotalLabel"):SetText(ToGold(math.floor(fm.farmer.totalValueFarmed or 0)))
	window:GetNamedChild("GoldPerSecondLabel"):SetText(ToGold(math.floor(fm.farmer:GetGoldPerSecond() * 60)).."/min")
end

function classes.FarmManagerMainWindow:OnItemFarmed(item, actionType)
	local scrollData = ZO_ScrollList_GetDataList(itemList)
	local found = false
	for _, itemData in pairs(scrollData) do
		if itemData.data.itemId == item.itemId then
            itemData.data:Add(item, actionType)
			found = true
			break
		end
	end

	if not found then
		local data = DetailEntry:New(item, actionType)
		scrollData[#scrollData + 1] = ZO_ScrollList_CreateDataEntry(1, data)
	end

    ZO_ScrollList_Commit(itemList)
end


function classes.FarmManagerMainWindow:Reset()
	local scrollData = ZO_ScrollList_GetDataList(itemList)
	ZO_ScrollList_Clear(itemList)
	ZO_ScrollList_Commit(itemList)
	window:GetNamedChild("TotalLabel"):SetText("")
	window:GetNamedChild("GoldPerSecondLabel"):SetText("")
end