--[[
Author: Jarth
Filename: MementoBar_Fragments.lua
]] --

-------------------------------------------------------------------------------------------------
-- VARIABLES --
-------------------------------------------------------------------------------------------------
local MementoBar = MementoBar

-------------------------------------------------------------------------------------------------
-- Helper FUNCTIONS --
-------------------------------------------------------------------------------------------------
function MementoBar:HelperSetFragmentBehaviour(value, scene, fragment, statement, frameIsHidden)
    if value then
        scene:AddFragment(fragment)

        -- Case when landing on a scene, before a transition
        if statement then
            frameIsHidden = false
        end
    else
        scene:RemoveFragment(fragment)
    end
    return frameIsHidden
end

-------------------------------------------------------------------------------------------------
-- PRIVATE FUNCTIONS --
-------------------------------------------------------------------------------------------------
function MementoBar:SetFragmentBehaviour()
    local base = MementoBar
    local frame = MementoBar_Frame
    local saved = base.Saved
    local fragment = base.Fragment
    local currentScene = SCENE_MANAGER:GetCurrentScene()
    local frameIsHidden = true

    if fragment == nil then
        base.Fragment = ZO_HUDFadeSceneFragment:New(frame)
        fragment = base.Fragment
    end

    frameIsHidden = MementoBar:HelperSetFragmentBehaviour(saved.ShowBarOnHud, HUD_SCENE, fragment, currentScene == nil, frameIsHidden)
    frameIsHidden = MementoBar:HelperSetFragmentBehaviour(saved.ShowBarOnHudUI, HUD_UI_SCENE, fragment, false, frameIsHidden)
    frameIsHidden =
        MementoBar:HelperSetFragmentBehaviour(
        saved.ShowBarInMenu,
        SCENE_MANAGER:GetScene("gameMenuInGame"),
        fragment,
        currentScene ~= nil and currentScene:GetName() == "gameMenuInGame",
        frameIsHidden
    )
    frameIsHidden = MementoBar:HelperSetFragmentBehaviour(saved.ShowBarInStore, SCENE_MANAGER:GetScene("store"), fragment, false, frameIsHidden)
    frameIsHidden = MementoBar:HelperSetFragmentBehaviour(saved.ShowBarInInventory, SCENE_MANAGER:GetScene("inventory"), fragment, false, frameIsHidden)

    frame:SetHidden(frameIsHidden)
end