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

-------------------------------------------------------------------------------------------------
-- VARIABLES --
-------------------------------------------------------------------------------------------------
local sharedBaseModule = JarthSharedBase

-------------------------------------------------------------------------------------------------
-- FUNCTIONS --
-------------------------------------------------------------------------------------------------
function JarthSharedBase.HelperSetFragmentBehaviour(value, scene, fragment, statement, isHidden)
    if scene ~= nil then
        if value then
            if not scene:HasFragment(fragment) then
                scene:AddFragment(fragment)
            end
            -- Case when landing on a scene, before a transition
            if statement then
                isHidden = false
            end
        else
            scene:RemoveFragment(fragment)
        end
    end
    return isHidden
end
-------------------------------------------------------------------------------------------------
-- PRIVATE FUNCTIONS --
-------------------------------------------------------------------------------------------------
function JarthSharedBase:SetFragmentBehaviour(frame, saved, fragment, isVisible)
    local isHidden = true
    local currentScene = SCENE_MANAGER:GetCurrentScene()
    local currentSceneIsGameMenuInGame = currentScene ~= nil and currentScene:GetName() == "gameMenuInGame"

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

    isHidden = sharedBaseModule.HelperSetFragmentBehaviour(saved.ShowBarOnHud, HUD_SCENE, fragment, currentScene == nil, isHidden)
    isHidden = sharedBaseModule.HelperSetFragmentBehaviour(saved.ShowBarOnHudUI, HUD_UI_SCENE, fragment, false, isHidden)
    isHidden = sharedBaseModule.HelperSetFragmentBehaviour(saved.ShowBarInMenu, SCENE_MANAGER:GetScene("gameMenuInGame"), fragment, currentSceneIsGameMenuInGame, isHidden)
    isHidden = sharedBaseModule.HelperSetFragmentBehaviour(saved.ShowBarInInventory, SCENE_MANAGER:GetScene("inventory"), fragment, false, isHidden)
    isHidden = sharedBaseModule.HelperSetFragmentBehaviour(saved.ShowBarInInteract, SCENE_MANAGER:GetScene("interact"), fragment, false, isHidden)
    isHidden = sharedBaseModule.HelperSetFragmentBehaviour(saved.ShowBarInBank, SCENE_MANAGER:GetScene("bank"), fragment, false, isHidden)
    isHidden = sharedBaseModule.HelperSetFragmentBehaviour(saved.ShowBarInFence, SCENE_MANAGER:GetScene("fence_keyboard"), fragment, false, isHidden)
    isHidden = sharedBaseModule.HelperSetFragmentBehaviour(saved.ShowBarInStore, SCENE_MANAGER:GetScene("store"), fragment, false, isHidden)

    frame:SetHidden(isHidden and not isVisible)

    return fragment
end