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

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

-------------------------------------------------------------------------------------------------
-- Helper FUNCTIONS --
-------------------------------------------------------------------------------------------------
function baseModule: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 baseModule:SetFragmentBehaviour()
    local frame = MementoBar_Frame
    local saved = baseModule.Saved
    local fragment = baseModule.Fragment
    local currentScene = SCENE_MANAGER:GetCurrentScene()
    local frameIsHidden = true
    local currentSceneIsGameMenuInGame = currentScene ~= nil and currentScene:GetName() == "gameMenuInGame"

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

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

    frame:SetHidden(frameIsHidden)
end