--[[
Author: Jarth
Filename: CBs_Fragment.lua
]] --
-------------------------------------------------------------------------------------------------
-- VARIABLES --
-------------------------------------------------------------------------------------------------
local base = CollectionBars
local texts = base.Texts

-------------------------------------------------------------------------------------------------
-- FUNCTIONS --
-------------------------------------------------------------------------------------------------
function base:UpdateFragments(fragmentType)
	base:Debug("UpdateFragments", fragmentType)

	for _, category in pairs(base.Categories) do
		if category.Saved.Enabled then
			base:UpdateFragment(category, fragmentType)
		end
	end

	base:UpdateFragment(base.Global.Combine, fragmentType)
end

function base:UpdateFragment(category, fragmentType)
	base:Debug("UpdateFragment", category, fragmentType)

	local currentScene = SCENE_MANAGER:GetCurrentScene()
	local isHidden = (currentScene == nil or currentScene:GetName() == "empty") and not base.Saved.Scene.OnHud

	if category.Fragment == nil then
		category.Fragment = ZO_HUDFadeSceneFragment:New(category.Frames.Frame)
	end

	for _, scene in ipairs(base.Global.Scenes) do
		if (not fragmentType or scene.Name == fragmentType) and scene ~= nil and scene.Instance ~= nil then
			if base.Saved.Scene[scene.Name] then
				if not scene.Instance:HasFragment(category.Fragment) then
					scene.Instance:AddFragment(category.Fragment)
				end
			else
				scene.Instance:RemoveFragment(category.Fragment)
			end
		end

		if scene.Instance == currentScene then
			isHidden = isHidden or not base.Saved.Scene[scene.Name]
		end
	end

	category.Frames.Frame:SetHidden(isHidden)
end

function base:RemoveFragments(category)
	base:Debug("RemoveFragments", category)

	if category.Fragment ~= nil then
		for _, scene in ipairs(base.Global.Scenes) do
			if scene ~= nil and scene.Instance ~= nil then
				scene.Instance:RemoveFragment(category.Fragment)
			end
		end
	end
end