--[[
##########################################################
S V U I   By: Munglunch
##########################################################
LOCALIZED LUA FUNCTIONS
##########################################################
]]--
--[[ GLOBALS ]]--
local _G = _G;
local unpack    = _G.unpack;
local select    = _G.select;
local pairs     = _G.pairs;
local ipairs    = _G.ipairs;
local type      = _G.type;
local error     = _G.error;
local pcall     = _G.pcall;
local tostring  = _G.tostring;
local tonumber  = _G.tonumber;
local assert 	= _G.assert;
local math 		= _G.math;
--[[ MATH METHODS ]]--
local random = math.random;
--[[
##########################################################
GET ADDON DATA
##########################################################
]]--
local SV = _G['SVUI']
local L = SV.L;
local LSM = _G.LibStub("LibSharedMedia-3.0")
local MOD = SV.UnitFrames

if(not MOD) then return end

local oUF_SVUI = MOD.oUF
assert(oUF_SVUI, "SVUI UnitFrames: unable to locate oUF.")
if(SV.class ~= "MAGE") then return end

local ORB_ICON = [[Interface\AddOns\SVUI_UnitFrames\assets\Class\ORB]];
local ORB_BG = [[Interface\AddOns\SVUI_UnitFrames\assets\Class\ORB-BG]];
local CHARGE_ICON = [[Interface\AddOns\SVUI_UnitFrames\assets\Class\MAGE-CHARGE]];
local ICICLE_ICON = [[Interface\AddOns\SVUI_UnitFrames\assets\Class\MAGE-ICICLE]];
local NO_ART = SV.NoTexture;
SV.SpecialFX:Register("mage_fire", [[Spells\Fill_fire_cast_01.m2]], 2, -2, -2, 2, 0.85, -0.45, 1)
local specEffects = { [1] = "arcane", [2] = "mage_fire", [3] = "frost" };
local specColors = {
	[1] = {0.8, 1, 1, 1},
	[2] = {1, 0.2, 0, 0.75},
	[3] = {0.95, 1, 1, 0.75}
};
--[[
##########################################################
POSITIONING
##########################################################
]]--
local OnMove = function()
	SV.db.UnitFrames.player.classbar.detachFromFrame = true
end

local Reposition = function(self)
	local db = SV.db.UnitFrames.player
	local bar = self.MageMagic;
	local max = self.MaxClassPower;
	local size = db.classbar.height
	local width = size * max;
	bar.Holder:SetSize(width, size)
    if(not db.classbar.detachFromFrame) then
    	SV:ResetAnchors(L["Classbar"])
    end
    local holderUpdate = bar.Holder:GetScript('OnSizeChanged')
    if holderUpdate then
        holderUpdate(bar.Holder)
    end

    bar:ClearAllPoints()
    bar:SetAllPoints(bar.Holder)
	for i = 1, max do
		bar[i]:ClearAllPoints()
		bar[i]:SetHeight(size-4)
		bar[i]:SetWidth(size-4)
		if i==1 then
			bar[i]:SetPoint("TOPLEFT", bar, "TOPLEFT", 0, 0)
		else
			bar[i]:SetPoint("LEFT", bar[i - 1], "RIGHT", -3, 0)
		end
	end
end
--[[
##########################################################
MAGE CHARGES
##########################################################
]]--
local PostTalentUpdate = function(self, spec)
	if(not self:IsShown()) then
		self:Show()
	end
	local color = specColors[spec]
	if(spec == 1) then
		for i = 1, 5 do
			self[i]:SetStatusBarTexture(CHARGE_ICON)
			self[i].bg:SetTexture(ORB_BG)
			self[i]:SetStatusBarColor(unpack(color))
			self[i].FX:SetEffect(specEffects[spec])
		end
	elseif(spec == 3) then
		for i = 1, 5 do
			self[i]:SetStatusBarTexture(ICICLE_ICON.."-"..i)
			self[i].bg:SetTexture(ICICLE_ICON.."-"..i)
			self[i]:SetStatusBarColor(unpack(color))
			self[i].FX:SetEffect(specEffects[spec])
		end
	else
		self.Ignite.FX:SetEffect(specEffects[spec])
	end
end

function MOD:CreateClassBar(playerFrame)
	local max = 5
	local bar = CreateFrame("Frame",nil,playerFrame)
	bar:SetFrameLevel(playerFrame.TextGrip:GetFrameLevel() + 30)

	for i = 1, max do
		bar[i] = CreateFrame("StatusBar", nil, bar)
		bar[i]:SetStatusBarTexture(CHARGE_ICON)
		bar[i]:GetStatusBarTexture():SetHorizTile(false)
		bar[i]:SetOrientation("VERTICAL")
		bar[i]:SetStatusBarColor(0.95, 1, 1, 0.75)
		bar[i].noupdate = true;

		bar[i].bg = bar[i]:CreateTexture(nil, "BACKGROUND")
		bar[i].bg:SetAllPoints(bar[i])
		bar[i].bg:SetTexture(ORB_BG);
		bar[i].bg:SetVertexColor(0.25,0.5,0.5)

		SV.SpecialFX:SetFXFrame(bar[i], "arcane")
		--bar[i].FX:SetFrameLevel(0)
		bar[i].FX:SetAlpha(0.5)
	end

	local bgFrame = CreateFrame("Frame", nil, bar)
	bgFrame:InsetPoints(bar)
	SV.SpecialFX:SetFXFrame(bgFrame, "arcane")

	local bgTexture = bgFrame:CreateTexture(nil, "BACKGROUND")
	bgTexture:SetAllPoints(bgFrame)
	bgTexture:SetColorTexture(0.09,0.01,0,0.5)

	local borderB = bgFrame:CreateTexture(nil,"OVERLAY")
	borderB:SetColorTexture(0,0,0)
	borderB:SetPoint("BOTTOMLEFT")
	borderB:SetPoint("BOTTOMRIGHT")
	borderB:SetHeight(2)

	local borderT = bgFrame:CreateTexture(nil,"OVERLAY")
	borderT:SetColorTexture(0,0,0)
	borderT:SetPoint("TOPLEFT")
	borderT:SetPoint("TOPRIGHT")
	borderT:SetHeight(2)

	local borderL = bgFrame:CreateTexture(nil,"OVERLAY")
	borderL:SetColorTexture(0,0,0)
	borderL:SetPoint("TOPLEFT")
	borderL:SetPoint("BOTTOMLEFT")
	borderL:SetWidth(2)

	local borderR = bgFrame:CreateTexture(nil,"OVERLAY")
	borderR:SetColorTexture(0,0,0)
	borderR:SetPoint("TOPRIGHT")
	borderR:SetPoint("BOTTOMRIGHT")
	borderR:SetWidth(2)

	bar.bg = bgTexture;


	local ignite = CreateFrame("StatusBar", nil, bgFrame)
	ignite.noupdate = true;
	ignite:InsetPoints(bgFrame)
	ignite:SetOrientation("HORIZONTAL")
	ignite:SetStatusBarTexture(SV.media.statusbar.glow)
	ignite:SetStatusBarColor(1, 0.2, 0, 0.75)
	ignite.text = ignite:CreateFontString(nil, "OVERLAY")
	ignite.text:SetPoint("LEFT")
	ignite.text:SetFontObject(SVUI_Font_Unit_Small)
	ignite.text:SetJustifyH('LEFT')
	ignite.text:SetTextColor(1,1,0)
	ignite.text:SetText("0")
	bgFrame.Bar = ignite;
    --SV.SpecialFX:SetFXFrame(ignite, "conqueror", true)
	--ignite.FX:SetScript("OnShow", EffectModel_OnShow)
	bar.Ignite = bgFrame;
	bar.Ignite:Hide();

	bar.PostTalentUpdate = PostTalentUpdate;
	local classBarHolder = CreateFrame("Frame", "Player_ClassBar", bar)
	classBarHolder:SetPoint("TOPLEFT", playerFrame, "BOTTOMLEFT", 0, -2)
	bar:SetPoint("TOPLEFT", classBarHolder, "TOPLEFT", 0, 0)
	bar.Holder = classBarHolder
	SV:NewAnchor(bar.Holder, L["Classbar"], OnMove)

	playerFrame.MaxClassPower = max;
	playerFrame.RefreshClassBar = Reposition;
	playerFrame.MageMagic = bar
	return 'MageMagic'
end
