--[[============================================================================
  This file is a part of ChampionBar

  Copyright (C) 2015 Scott Yeskie (Sasky)

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  ============================================================================]]

ChampionBar = ChampionBar or {}

local function replaceBars()
    local ppb = PLAYER_PROGRESS_BAR
    ppb.barTypeClasses[PPB_CLASS_EP] = ChampionBar.EPBarType
    ppb.barTypeClasses[PPB_CLASS_VP] = ChampionBar.VPMaxBarType
    ppb.nextBarType = 1
    ppb.barTypes = {}

    PPB_XP = ppb:InstantiateBarType(PPB_CLASS_XP)
    PPB_VP = ppb:InstantiateBarType(PPB_CLASS_VP)
    PPB_CP = ppb:InstantiateBarType(PPB_CLASS_CP)
    PPB_EP = ppb:InstantiateBarType(PPB_CLASS_EP)
    ppb:InitializeLastValues()
end

local function replaceHandlers()
    function PLAYER_PROGRESS_BAR:RefreshSecondaryBar()
        local secondaryBarInfo = self:GetSecondaryBarInfo()
        if secondaryBarInfo then
            local current = secondaryBarInfo:GetCurrent()
            local max = secondaryBarInfo:GetLevelSize(secondaryBarInfo:GetLevel())
            if max == nil then
                current = 1
                max = 1
            end
            self.secondaryBarControl:SetMinMax(0, max)
            self.secondaryBarControl:SetValue(current)
            local gradient = secondaryBarInfo:GetBarGradient()
            ZO_StatusBar_SetGradientColor(self.secondaryBarControl, gradient)
            ZO_StatusBar_SetGradientColor(self.enlightenedBarControl, gradient)
            local icon = secondaryBarInfo:GetIcon()
            if icon then
                self.secondaryBarLevelTypeIcon:SetTexture(icon)
            end
            self.secondaryBarLevelTypeIcon:SetHidden(not icon)
            local txt = current == 0 and "" or "ENLIGHTENED"
            self.secondaryBarControl:GetNamedChild("SecondaryLevelType"):SetText(txt)
        end
        self.secondaryBarControl:SetHidden(secondaryBarInfo == nil)
    end

    function PLAYER_PROGRESS_BAR:Show()
        self:SetBarState("showing")

        local barTypeInfo = self:GetBarTypeInfo()
        AAA = barTypeInfo
        ZO_StatusBar_SetGradientColor(self.barControl, barTypeInfo:GetBarGradient())

        self:RefreshSecondaryBar()

        for i = 1, self.glowContainer:GetNumChildren() do
            local glowTexture = self.glowContainer:GetChild(i)
            glowTexture:SetColor(barTypeInfo.barGlowColor:UnpackRGB())
        end

        self.levelTypeLabel:SetText(zo_strformat(SI_LEVEL_BAR_LABEL, barTypeInfo.levelTypeText))

        if(barTypeInfo:GetIcon() ~= nil) then
            self.levelTypeIcon:SetHidden(false)
            self.levelTypeIcon:SetTexture(barTypeInfo.icon)
        else
            self.levelTypeIcon:SetHidden(true)
        end

        self.control:SetHidden(false)
        self.fadeTimeline:PlayForward()
    end
end

local function onAddOnLoaded(_, addonName)
    if addonName ~= "ChampionBar" then return end
    replaceBars()
    replaceHandlers()
end

EVENT_MANAGER:RegisterForEvent("ChampionBarReplace", EVENT_ADD_ON_LOADED, onAddOnLoaded)