--[[
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