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

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

-------------------------------------------------------------------------------------------------
-- FUNCTIONS --
-------------------------------------------------------------------------------------------------
function sharedBaseModule:SetFrameSettings(frame, isHidden, height, width)
    if frame ~= nil then
        frame:SetHidden(isHidden)
        frame:SetHeight(height)
        frame:SetWidth(width)
    end
end

function sharedBaseModule.ButtonHighlightEnter(frame)
    local highlightColor = frame.Saved.HighlightColor
    local buttonBackdrop = GetControl(frame, "Backdrop")

    if buttonBackdrop ~= nil then
        if frame.Saved.IsAudioEnabled then
            PlaySound(SOUNDS.QUICKSLOT_MOUSEOVER)
        end

        buttonBackdrop:SetEdgeColor(highlightColor.r, highlightColor.g, highlightColor.b, highlightColor.a)
    end
end

function sharedBaseModule.ButtonHighlightExit(frame)
    local edgeColor = frame.Saved.EdgeColor
    local buttonBackdrop = GetControl(frame, "Backdrop")

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

function sharedBaseModule:GetButtonPosition(baseModule, index)
    local left = baseModule.Saved.Width * ((index - 1) % baseModule.Saved.BarDepth)
    local top = baseModule.Saved.Height * (math.floor((index - 1) / baseModule.Saved.BarDepth))

    if not baseModule.Saved.Horizontal then
        left = baseModule.Saved.Width * (math.floor((index - 1) / baseModule.Saved.BarDepth))
        top = baseModule.Saved.Height * ((index - 1) % baseModule.Saved.BarDepth)
    end

    return left, top
end

function sharedBaseModule:SetupButton(baseModule, key, left, top, position)
    local button = baseModule.Buttons[key]
    button:ClearAnchors()
    button:SetAnchor(position, baseModule.Frame, position, left, top)
    button:SetHeight(baseModule.Saved.Height)
    button:SetWidth(baseModule.Saved.Width)
    button:SetHidden(false)
end

function sharedBaseModule:SetupButtonBinding(baseModule, key)
    local button = baseModule.Buttons[key]
    local buttonBinding = GetControl(button, "Binding")

    if buttonBinding ~= nil and baseModule.Saved.ShowKeyBinding then
        sharedBaseModule:HotkeyUpdateColor(baseModule, buttonBinding)
        buttonBinding:SetText(sharedBaseModule:HotkeyGetKey(baseModule, key))
        buttonBinding:SetDrawLevel(3)
        buttonBinding:ClearAnchors()
        buttonBinding:SetAnchor(baseModule.Saved.KeyBindingLocation, button, baseModule.Saved.KeyBindingLocation, 0, 0)
    end

    if buttonBinding ~= nil then
        buttonBinding:SetHidden(not baseModule.Saved.ShowKeyBinding)
    end
end

function sharedBaseModule:SetupButtonTexture(baseModule, key, left, top, collection, position)
    local button = baseModule.Buttons[key]
    local buttonTexture = GetControl(button, "Texture")

    if buttonTexture ~= nil then
        button:SetHandler("OnClicked", baseModule.ButtonOnClicked)
        buttonTexture:SetDrawLevel(3)
        buttonTexture:SetTexture(collection[key].EnabledTexture)
        buttonTexture:ClearAnchors()
        buttonTexture:SetAnchor(position, baseModule.Frame, position, left + baseModule.Saved.Margin, top + baseModule.Saved.Margin)
        buttonTexture:SetHeight(button:GetHeight() - (2 * baseModule.Saved.Margin))
        buttonTexture:SetWidth(button:GetWidth() - (2 * baseModule.Saved.Margin))
    end
end

function sharedBaseModule:SetupButtonBackdrop(baseModule, key, left, top, position)
    local button = baseModule.Buttons[key]
    local buttonBackdrop = GetControl(button, "Backdrop")

    if buttonBackdrop ~= nil then
        buttonBackdrop:SetDrawLevel(2)
        buttonBackdrop:SetEdgeTexture(nil, 1, 1, baseModule.Saved.Margin)
        buttonBackdrop:ClearAnchors()
        buttonBackdrop:SetAnchor(position, baseModule.Frame, position, left, top)
        buttonBackdrop:SetHeight(button:GetHeight())
        buttonBackdrop:SetWidth(button:GetWidth())
    end
end