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

-------------------------------------------------------------------------------------------------
-- VARIABLES --
-------------------------------------------------------------------------------------------------
local baseModule = SummonAssistant
local sharedBaseModule = JarthSharedBase

-------------------------------------------------------------------------------------------------
-- FUNCTIONS --
-- Button highlight --
-------------------------------------------------------------------------------------------------
function baseModule.ButtonOnClicked(button)
    local id = button:GetId()

    if id > 0 then
        if IsCollectibleUnlocked(id) then
            UseCollectible(id)
        else
            UseCollectible(GetActiveCollectibleByType(COLLECTIBLE_CATEGORY_TYPE_ASSISTANT))
        end
    end
end

-------------------------------------------------------------------------------------------------
-- PRIVATE FUNCTIONS --
-------------------------------------------------------------------------------------------------

function baseModule:SetButtonFrameWidth(collection)
    local count, height, width = 0, 0, 0

    for key, _ in pairs(collection) do
        if IsCollectibleUnlocked(key) and collection[key] then
            count = count + 1
        end
    end

    if count > 0 then
        local depth = math.ceil(count / baseModule.Saved.BarDepth)
        height = baseModule.Saved.Height * (baseModule.Saved.Horizontal and depth or baseModule.Saved.BarDepth)
        width = baseModule.Saved.Width * (not baseModule.Saved.Horizontal and depth or baseModule.Saved.BarDepth)
    end

    sharedBaseModule:SetFrameSettings(baseModule.Frame, count == 0, height, width)
end

function baseModule:InitializeButtons(frame, orderedCollection)
    local index = 1
    local position = TOPLEFT

    for _, _value in ipairs(orderedCollection) do
        local id = _value.Id
        local key = _value.Name

        if baseModule.Saved.ShowAssistants[id] and IsCollectibleUnlocked(_value.Id) then
            if baseModule.Buttons[key] == nil then
                baseModule.Buttons[key] = WINDOW_MANAGER:CreateControlFromVirtual("SummonAssistant_Button", frame, "SummonAssistant_Button", key)
                baseModule.Buttons[key].Saved = baseModule.Saved
                baseModule.Buttons[key]:SetId(id)
            end

            local left, top = sharedBaseModule:GetButtonPosition(baseModule, index)
            sharedBaseModule:SetupButton(baseModule, key, left, top, position)
            sharedBaseModule:SetupButtonBinding(baseModule, key)
            sharedBaseModule:SetupButtonBackdrop(baseModule, key, left, top, position)
            sharedBaseModule:SetupButtonTexture(baseModule, key, left, top, baseModule.Types, position)
            baseModule.Buttons[key]:SetHandler("OnMouseEnter", sharedBaseModule.ButtonHighlightEnter)
            baseModule.Buttons[key]:SetHandler("OnMouseExit", sharedBaseModule.ButtonHighlightExit)
            index = index + 1
        elseif baseModule.Buttons[key] ~= nil then
            baseModule.Buttons[key]:SetHidden(true)
        end
    end
end

function baseModule:RestoreButtons(orderedCollection)
    local centerColor = baseModule.Saved.CenterColor
    local edgeColor = baseModule.Saved.EdgeColor

    for _, _value in ipairs(orderedCollection) do
        if baseModule.Buttons[_value.Name] ~= nil then
            local buttonBackdrop = GetControl(baseModule.Buttons[_value.Name], "Backdrop")

            if buttonBackdrop ~= nil then
                buttonBackdrop:SetCenterColor(centerColor.r, centerColor.g, centerColor.b, centerColor.a)
                buttonBackdrop:SetEdgeColor(edgeColor.r, edgeColor.g, edgeColor.b, edgeColor.a)
            end
        end
    end
end