ESOTheatreII.ESOEmotesListGUI = {}
local IsConfigurationMode = false
local ETII = ESOTheatreII
local IsDataLoaded = false

function ETII.SetEmoteListItem(control,data)
	control:SetWidth(ETII.TweaksUI.EmoteConfigWindow.ButtonSize)
	local listitemtext = control:GetNamedChild( "Name" )
	listitemtext:SetText( data.EmoteName )
	listitemtext:SetColor(0.77,0.76,0.62,1)
	listitemtext:SetWidth(ETII.TweaksUI.EmoteConfigWindow.ButtonSize - 10)
end

function ETII.ESOEmotesListGUI:FillScrollList()
	IsDataLoaded = true
	local control = GetControl("PlaybillFrameList")
	ZO_ScrollList_Clear(control)

	local tblCategory = ETII.ETIIEmoteCategory
	for k  in pairs (tblCategory) do
		--ZO_ScrollList_AddCategory(control, tblCategory[k])
		ZO_ScrollList_AddCategory(control, k)
	end

  local datalist = ZO_ScrollList_GetDataList(control)
	local tblemote = ETII.ETIIEmoteData
	local listsize = ETII.TableSize( tblemote )
	for i = 1, listsize do
		datalist[i] = ZO_ScrollList_CreateDataEntry( 1, { EmoteName = tblemote[i][4], ID = tblemote[i][3], }, tblemote[i][2])
	end
	ZO_ScrollList_Commit(control, datalist)
	--control:RefreshData()
end


function ETII.ESOEmotesListGUI:Initialize()
	local control = GetControl("PlaybillFrameList")
	control:SetHeight(300)
	control:SetWidth(125)
	ZO_ScrollList_AddDataType(control, 1 , "PlaybillListItemTemplate", 20,  ETII.SetEmoteListItem)
	-- ETII.ESOEmotesListGUI:FillScrollList()
end

function ETII.ESOEmotesListGUI:ToggleWindow()
	local control = GetControl("PlaybillFrame")
    if ( control:IsHidden() ) then
		ETII.ESOEmotesListGUI:Show()
	else
		control:SetHidden( true )
    end
end

function ETII.ESOEmotesListGUI:PlaybillFrameOnSave()
	local lastEmote = ETII.GetLastEmote()
	if (lastEmote.ID > 0) then
		local control = GetControl("PlaybillFrame")
		local statuspaneltxt = control:GetNamedChild("StatusLabel")
		local btntochange = statuspaneltxt:GetText()
		if ETII.IsVerbose() then
			ETII.PrintSystemChat( string.format("Going to change %s to emote id %d ( %s )" , btntochange, lastEmote.ID, lastEmote.Name))
		end
		ETII.ESOFavoritesGUI:FavoriteButtonOnChange(btntochange, lastEmote.ID)
	end
	ETII.ESOEmotesListGUI:Hide()
end


function ETII.ESOEmotesListGUI:Show(aname)
	if not IsDataLoaded then
		 ETII.ESOEmotesListGUI:FillScrollList()
	end

	local width
	local height
	local control = GetControl("PlaybillFrame")
	if (control:IsHidden()) then
		ETII.SetLastEmote("",0)
		control:SetHidden( false )
		local emotelabel = GetControl("PlaybillFrameBottomPanelStatusEmote")
		emotelabel:SetText("")

		local WindowTitle =GetControl("PlaybillFrameHeaderPanelTitle")
		local btnSave = control:GetNamedChild("ButtonSave")
		local btnCancel = control:GetNamedChild("ButtonCancel")

		local tblemote = ETII.ETIIEmoteData

		--btnSave:SetText(ETII.AddOnStrings.EN_SAVE)
		--btnCancel:SetText(ETII.AddOnStrings.EN_CANCEL)

		if (aname ~= nil) then
			IsConfigurationMode = true
			width = ETII.TweaksUI.EmoteConfigWindow.WindowMaxWidth
			height = ETII.TweaksUI.EmoteConfigWindow.WindowMaxHeight
			ETII.ESOFavoritesGUI:MinimizeWindowToggle()
			local statuspaneltxt = control:GetNamedChild("StatusLabel")
			statuspaneltxt:SetText(string.sub(aname,13))
			if ETII.IsVerbose() then
				statuspaneltxt:SetHidden( false )
			else
				statuspaneltxt:SetHidden( true )
			end
			local apanel =  control:GetNamedChild("List")
			apanel:SetHeight( height - 120 )
			apanel:SetWidth( ETII.TweaksUI.EmoteConfigWindow.ButtonSize )

			local apanel =  control:GetNamedChild("BottomPanel")
			apanel:SetWidth( width - 5 )
			apanel:SetHeight( 45 )
			local child =  apanel:GetNamedChild("StatusEmote")
			child:ClearAnchors()
			child:SetAnchor( CENTER, apanel, TOP, 0, 2)
			btnSave:SetHidden( false )
			btnCancel:SetHidden( false )
		else
			IsConfigurationMode = false
			width = ETII.TweaksUI.EmoteConfigWindow.WindowMinWidth
			height = ETII.TweaksUI.EmoteConfigWindow.WindowMinHeight
			local apanel =  control:GetNamedChild("List")
			apanel:SetHeight( height - 110 )
			apanel:SetWidth( ETII.TweaksUI.EmoteConfigWindow.ButtonSize )

			local apanel =  control:GetNamedChild("BottomPanel")
			apanel:SetWidth( width - 5 )
			apanel:SetHeight( 35 )
			local child =  apanel:GetNamedChild("StatusEmote")
			child:ClearAnchors()
			child:SetAnchor( CENTER, apanel, CENTER, nil, nil)
			btnSave:SetHidden( true )
			btnCancel:SetHidden( true )
		end
		control:SetWidth(width)
		control:SetHeight(height)
		local apanel =  control:GetNamedChild("HeaderPanel")
		apanel:SetWidth( width - 5 )
		local apanel =  control:GetNamedChild("CenterPanel")
		apanel:SetWidth( width - 5 )
		apanel:SetHeight( height- 5 )

	else
		if (aname ~= nil) then
			ETII.ESOEmotesListGUI:Hide()
			ETII.ESOEmotesListGUI:Show(aname)
		end
	end
end

function ETII.ESOEmotesListGUI:Hide()
	local control = GetControl("PlaybillFrame")
	control:SetHidden( true )
	if (IsConfigurationMode == true) then
		ETII.ESOFavoritesGUI:MinimizeWindowToggle()
	end
end

function ETII.ESOEmotesListGUI:MoveWindow( x, y )
		local mainframe = GetControl("PlaybillFrame")
		mainframe:ClearAnchors()
		mainframe:SetAnchor( TOPLEFT, GetControl("GuiRoot"), TOPLEFT, x, y)
end

function ETII.ESOEmotesListGUI:SaveWindowPosition()
	local mainframe = GetControl("PlaybillFrame")
	local x =mainframe:GetLeft()
	local y = mainframe:GetTop()
	if ETII.IsVerbose() then
		ETII.PrintSystemChat( string.format("Top and Left inside GuiRoot= %d : %d",x ,y ))
	end
	ETII.CurrentSVars.UserSettings.PlaybillLocation.Xoffset = x
	ETII.CurrentSVars.UserSettings.PlaybillLocation.Yoffset = y
end

function ETII.ESOEmotesListGUI:LoadCategoryFilters()
	local comboBox = ZO_ComboBox_ObjectFromContainer(PlaybillFrameComboBox01)
	comboBox:SetSortsItems(false)
	comboBox:SetSpacing(4)

	local function OnFilterChanged(comboBox, entryText, entry)
		if ETII.IsVerbose() then
			ETII.PrintSystemChat( string.format("%s", entryText ))
		end
		local emotecatid = ETII.CategoryIdByName(entryText)
		local control = GetControl("PlaybillFrameList")
		ZO_ScrollList_HideAllCategories(control)
		if (emotecatid < 15) then
			ZO_ScrollList_ShowCategory(control, emotecatid)
		else
			for k in ipairs (ETII.ETIIEmoteCategory) do
				--d(k)
				ZO_ScrollList_ShowCategory(control, k)
			end
		end
	end

	local tblCategory = ETII.ETIIEmoteCategory

	for k  in ipairs (tblCategory) do
		local entry = comboBox:CreateItemEntry(tblCategory[k], OnFilterChanged)
		comboBox:AddItem(entry)
	end

	comboBox:SetSelectedItem("all")
end