 local AS = unpack(AddOnSkins)

function AS:Blizzard_EncounterJournal(event, addon)
	if addon ~= 'Blizzard_EncounterJournal' then return end

	AS:SkinBackdropFrame(EncounterJournal)

	AS:SkinBackdropFrame(EncounterJournal.navBar, nil, nil, true)
	EncounterJournal.navBar.Backdrop:SetPoint("TOPLEFT", -2, 0)
	EncounterJournal.navBar.Backdrop:SetPoint("BOTTOMRIGHT")

	AS:StripTextures(EncounterJournal.navBar.overlay, true)
	AS:SkinButton(EncounterJournal.navBar.homeButton, true)
	EncounterJournal.navBar.homeButton.xoffset = 1

	AS:SkinEditBox(EncounterJournal.searchBox)
	AS:SkinCloseButton(EncounterJournal.CloseButton)

	AS:CreateBackdrop(EncounterJournal.encounter.info)

	for _, Tab in pairs({ EncounterJournal.encounter.info.bossTab, EncounterJournal.encounter.info.lootTab, EncounterJournal.encounter.info.modelTab, EncounterJournal.encounter.info.overviewTab }) do
		Tab:GetNormalTexture():SetTexture()
		Tab:GetPushedTexture():SetTexture()
		Tab:GetDisabledTexture():SetTexture()
		Tab:GetHighlightTexture():SetTexture()
		AS:SkinBackdropFrame(Tab, nil, true)
		Tab.Backdrop:SetPoint('TOPLEFT', 11, -8)
		Tab.Backdrop:SetPoint('BOTTOMRIGHT', -6, 8)
		Tab:HookScript('OnEnter', function(self) self.Backdrop:SetBackdropBorderColor(unpack(AS.Color)) end)
		Tab:HookScript('OnLeave', function(self) self.Backdrop:SetBackdropBorderColor(unpack(AS.BorderColor)) end)
	end

	EncounterJournal.encounter.info.overviewTab:SetPoint('TOPLEFT', EncounterJournal.encounter.info, 'TOPRIGHT', AS:AdjustForTheme(-2), -35)
	EncounterJournal.encounter.info.overviewTab.SetPoint = AS.Noop

	AS:StripTextures(EncounterJournal.instanceSelect)
	AS:SkinFrame(EncounterJournal.suggestFrame)
	AS:SkinFrame(EncounterJournal.instanceSelect.scroll)

	AS:SkinScrollBar(EncounterJournal.instanceSelect.scroll.ScrollBar)

	AS:SkinButton(EncounterJournal.instanceSelect.dungeonsTab, true)
	AS:SkinButton(EncounterJournal.instanceSelect.raidsTab, true)
	AS:SkinButton(EncounterJournal.instanceSelect.suggestTab, true)
	AS:SkinButton(EncounterJournal.instanceSelect.LootJournalTab, true)

	AS:SkinScrollBar(EncounterJournal.encounter.info.lootScroll.scrollBar)
	AS:SkinScrollBar(EncounterJournal.encounter.info.detailsScroll.ScrollBar)
	AS:SkinScrollBar(EncounterJournal.encounter.info.bossesScroll.ScrollBar)
	AS:SkinScrollBar(EncounterJournal.encounter.instance.loreScroll.ScrollBar)

	AS:StripTextures(EncounterJournal.encounter.info)

	EncounterJournal.encounter.instance.loreScroll.child.lore:SetTextColor(1, 1, 1)
	EncounterJournal.encounter.info.detailsScroll.child.description:SetTextColor(1, 1, 1)
	EncounterJournal.encounter.info.overviewScroll.child.loreDescription:SetTextColor(1, 1, 1)
	EncounterJournal.encounter.info.overviewScroll.child.header:Hide()

	_G.EncounterJournalEncounterFrameInfoOverviewScrollFrameScrollChildTitle:SetFontObject("GameFontNormalLarge")
	_G.EncounterJournalEncounterFrameInfoOverviewScrollFrameScrollChildTitle:SetTextColor(1, 1, 1)

	EncounterJournal.instanceSelect.suggestTab:SetPoint('BOTTOMLEFT', '$parent', 'TOPLEFT', 25, -49)
	EncounterJournal.encounter.info.overviewScroll.child.overviewDescription.Text:SetTextColor(1, 1, 1)

	AS:SkinFrame(EncounterJournal.LootJournal)
	AS:StripTextures(EncounterJournal.LootJournal.ItemSetsFrame.ClassButton)
	AS:SkinButton(EncounterJournal.LootJournal.ItemSetsFrame.ClassButton, true)
	AS:SkinScrollBar(EncounterJournal.LootJournal.ItemSetsFrame.scrollBar)

	EncounterJournal.instanceSelect.bg:SetAlpha(0)

	AS:Delay(0, function() AS:SkinDropDownBox(EncounterJournalInstanceSelectTierDropDown) end) -- Apparently Spawned but not all elements until the frame is shown.

	for i = 1, AJ_MAX_NUM_SUGGESTIONS do
		local suggestion = EncounterJournal.suggestFrame["Suggestion"..i]
		local centerDisplay = suggestion.centerDisplay
		local reward = suggestion.reward

		suggestion.bg:SetAlpha(0)
		AS:CreateBackdrop(suggestion.bg)

		AS:CreateBackdrop(suggestion.icon)

		centerDisplay.title.text:SetTextColor(1, 1, 1)
		centerDisplay.description.text:SetTextColor(.9, .9, .9)

		AS:CreateBackdrop(reward.icon)
		reward.iconRing:Hide()
		reward.iconRingHighlight:SetTexture("")

		if i == 1 then
			reward.text:SetTextColor(.9, .9, .9)

			suggestion.icon:SetPoint("TOPLEFT", 135, -15)

			AS:SkinButton(suggestion.button)
			AS:SkinArrowButton(suggestion.prevButton)
			AS:SkinArrowButton(suggestion.nextButton)
		else
			reward:SetFrameLevel(suggestion:GetFrameLevel() + 3)
			AS:SkinButton(suggestion.centerDisplay.button)
			suggestion.bg:SetPoint('TOPLEFT', -16, 4)
		end
	end

	AS:SkinButton(EncounterJournal.encounter.info.lootScroll.lootSlotFilter, true)
	AS:SkinButton(EncounterJournal.encounter.info.lootScroll.filter, true)
	AS:SkinButton(EncounterJournal.encounter.info.lootScroll.slotFilter, true)
	AS:StripTextures(EncounterJournal.encounter.info.lootScroll.classClearFilter, true)
	EncounterJournal.encounter.info.lootScroll.classClearFilter.text:SetTextColor(1, 1, 1)
	AS:SkinButton(EncounterJournal.encounter.info.reset)
	AS:SkinButton(EncounterJournal.encounter.info.difficulty, true)

	for i, Button in pairs(EncounterJournal.encounter.info.lootScroll.buttons) do
		Button.bossTexture:SetAlpha(0)
		Button.bosslessTexture:SetAlpha(0)

		Button.icon:SetSize(32, 32)
		Button.icon:SetPoint("TOPLEFT", AS:AdjustForTheme(3), AS:AdjustForTheme(-7))
		AS:SkinTexture(Button.icon, true)

		Button.name:SetPoint("TOPLEFT", Button.icon, "TOPRIGHT", 6, -2)
		Button.boss:SetTextColor(1, 1, 1)
		Button.boss:SetPoint("BOTTOMLEFT", 4, 6)
		Button.slot:SetPoint("TOPLEFT", Button.name, "BOTTOMLEFT", 0, -3)
		Button.slot:SetTextColor(1, 1, 1)
		Button.armorType:SetTextColor(1, 1, 1)
		Button.armorType:SetPoint("RIGHT", Button, "RIGHT", -10, 0)

		hooksecurefunc(Button.IconBorder, "SetVertexColor", function(self, r, g, b)
			self:GetParent().icon.Backdrop:SetBackdropBorderColor(r, g, b)
			self:SetTexture("")
		end)

		AS:CreateBackdrop(Button)
		Button.Backdrop:SetPoint("TOPLEFT", 0, -4)
		Button.Backdrop:SetPoint("BOTTOMRIGHT", 0, AS.PixelMode and 3 or 0)

		if i == 1 then
			Button:ClearAllPoints()
			Button:SetPoint("TOPLEFT", EncounterJournal.encounter.info.lootScroll.scrollChild, "TOPLEFT", 5, 0)
		end
	end

	AS:SkinTooltip(EncounterJournalTooltip)

	hooksecurefunc('AdventureJournal_Reward_OnEnter', function(self)
		local rewardData = self.data
		if ( rewardData ) then
			local frame = EncounterJournalTooltip
			if ( rewardData.itemLink or rewardData.currencyType ) then
				local _, _, quality = GetItemInfo(rewardData.itemLink)
				AS:SkinTexture(frame.Item1.icon, true)
				frame.Item1.icon.Backdrop:SetBackdropBorderColor(GetItemQualityColor(quality))
				frame.Item1.IconBorder:SetAlpha(0)
				frame.Item1.tooltip:SetBackdrop(nil)
			end
		end
	end)

	hooksecurefunc("EncounterJournal_ListInstances", function()
		local instanceSelect = EncounterJournal.instanceSelect
		local scrollFrame = instanceSelect.scroll.child
		local index = 1
		local Button = scrollFrame["instance"..index]

		while Button do
			AS:SkinButton(Button)
			scrollFrame["instance"..index].bgImage:SetTexCoord(.08, .6, .08, .6)
			scrollFrame["instance"..index].bgImage:SetDrawLayer('ARTWORK')
			AS:SetInside(scrollFrame["instance"..index].bgImage)
			index = index + 1
			Button = scrollFrame["instance"..index]
		end
	end)

	hooksecurefunc("EncounterJournal_DisplayInstance", function()
		local bossIndex = 1
		local bossButton = _G["EncounterJournalBossButton"..bossIndex]

		while bossButton do
			AS:SkinButton(bossButton)
			bossButton.creature:ClearAllPoints()
			bossButton.creature:SetPoint("TOPLEFT", 1, -4)

			bossIndex = bossIndex + 1
			bossButton = _G["EncounterJournalBossButton"..bossIndex]
		end
	end)

	hooksecurefunc("EncounterJournal_SetUpOverview", function(self, _, index)
		local header = self.overviews[index]
		if not header.isSkinned then

			header.descriptionBG:SetAlpha(0)
			AS:CreateBackdrop(header.descriptionBG)
			header.descriptionBG.Backdrop:SetAllPoints()
			header.descriptionBGBottom:SetAlpha(0)

			for i = 4, 18 do
				select(i, header.button:GetRegions()):SetTexture("")
			end

			AS:SkinButton(header.button)

			header.button.title:SetTextColor(unpack(AS.Color))
			header.button.title.SetTextColor = AS.Noop
			header.button.expandedIcon:SetTextColor(1, 1, 1)
			header.button.expandedIcon.SetTextColor = AS.Noop

			header.isSkinned = true
		end
	end)

	hooksecurefunc("EncounterJournal_SetBullets", function(object)
		local parent = object:GetParent()

		if parent.Bullets then
			for _, bullet in pairs(parent.Bullets) do
				if not bullet.styled then
					bullet.Text:SetTextColor(1, 1, 1)
					bullet.styled = true
				end
			end
		end
	end)

	hooksecurefunc("EncounterJournal_ToggleHeaders", function()
		local index = 1
		local header = _G["EncounterJournalInfoHeader"..index]
		while header do
			if not header.isSkinned then
				header.flashAnim.Play = AS.Noop

				header.descriptionBG:SetAlpha(0)
				header.descriptionBGBottom:SetAlpha(0)

				for i = 4, 18 do
					select(i, header.button:GetRegions()):SetTexture("")
				end

				header.description:SetTextColor(1, 1, 1)
				header.button.title:SetTextColor(unpack(AS.Color))
				header.button.title.SetTextColor = AS.Noop
				header.button.expandedIcon:SetTextColor(1, 1, 1)
				header.button.expandedIcon.SetTextColor = AS.Noop

				AS:SkinButton(header.button)

				AS:SkinTexture(header.button.abilityIcon, true)

				header.isSkinned = true
			end

			index = index + 1
			header = _G["EncounterJournalInfoHeader"..index]
		end
	end)

	hooksecurefunc("EJSuggestFrame_RefreshDisplay", function()
		for i = 1, 3 do
			local Suggestion = EncounterJournal.suggestFrame['Suggestion'..i]
			local Data = EncounterJournal.suggestFrame.suggestions[i]
			if Suggestion and Data then
				Suggestion.iconRing:Hide()
				Suggestion.icon:SetMask("")
				Suggestion.icon:SetTexture(Data.iconPath or QUESTION_MARK_ICON)
				AS:SkinTexture(Suggestion.icon)
			end
		end
	end)

	hooksecurefunc("EJSuggestFrame_UpdateRewards", function(suggestion)
		local rewardData = suggestion.reward.data
		if rewardData then
			local texture = rewardData.itemIcon or rewardData.currencyIcon or [[Interface\Icons\achievement_guildperk_mobilebanking]]
			suggestion.reward.icon:SetMask("")
			suggestion.reward.icon:SetTexture(texture)
			AS:SkinTexture(suggestion.reward.icon)
			local r, g, b = unpack(AS.BorderColor)
			if rewardData.itemID then
				local quality = select(3, GetItemInfo(rewardData.itemID))
				if quality and quality > 1 then
					r, g, b = GetItemQualityColor(quality)
				end
			end
			suggestion.reward.icon.Backdrop:SetBackdropBorderColor(r, g, b)
		end
	end)

	hooksecurefunc(EncounterJournal.LootJournal.ItemSetsFrame, "UpdateList", function(self)
		for _, Button in pairs(self.buttons) do
			Button.ItemLevel:SetTextColor(1, 1,  1)
			Button.Background:Hide()
			AS:SkinFrame(Button)

			for _, Item in pairs(Button.ItemButtons) do
				Item.Border:Hide()
				Item.Icon:SetPoint("TOPLEFT", 1, -1)
				AS:SkinTexture(Item.Icon, true)
			end
		end
	end)

	hooksecurefunc(EncounterJournal.LootJournal.ItemSetsFrame, 'ConfigureItemButton', function(self, button)
		local r, g, b = unpack(AS.BorderColor)
		if button.itemID then
			local _, _, itemQuality = GetItemInfo(button.itemID)
			if itemQuality and itemQuality > 1 then
				r, g, b = GetItemQualityColor(itemQuality)
			end
		end
		if button.Icon.Backdrop then
			button.Icon.Backdrop:SetBackdropBorderColor(r, g, b)
		end
	end)

	AS:UnregisterSkinEvent(addon, event)
end

AS:RegisterSkin("Blizzard_EncounterJournal", AS.Blizzard_EncounterJournal, 'ADDON_LOADED')
