--$Id: OneBank.lua 9194 2006-08-26 13:17:30Z kaelten $
OneBank = OneCore:NewModule("OneBank", "AceEvent-2.0", "AceHook-2.0", "AceDebug-2.0", "AceConsole-2.0", "AceDB-2.0")
local L = AceLibrary("AceLocale-2.1"):GetInstance("OneBank", true)

function OneBank:OnInitialize()
	
    local baseArgs = OneCore:GetFreshOptionsTable(self)
    
	local customArgs = {
        ["5"] = {
            name = L["First Bag"], type = 'toggle', order = 5,
            desc = L["Turns display of your first bag on and off."],
            get = function() return self.db.profile.show[5] end,
            set = function(v) 
                self.db.profile.show[5] = v 
                self:OrganizeFrame(true)
            end,
        },
        ["6"] = {
            name = L["Second Bag"], type = 'toggle', order = 6,
            desc = L["Turns display of your second bag on and off."],
            get = function() return self.db.profile.show[6] end,
            set = function(v) 
                self.db.profile.show[6] = v 
                self:OrganizeFrame(true)
            end,
        },
        ["7"] = {
            name = L["Third Bag"], type = 'toggle', order = 7,
            desc = L["Turns display of your third bag on and off."],
            get = function() return self.db.profile.show[7] end,
            set = function(v) 
                self.db.profile.show[7] = v 
                self:OrganizeFrame(true)
            end,
        },
        ["8"] = {
            name = L["Fourth Bag"], type = 'toggle', order = 8,
            desc = L["Turns display of your fourth bag on and off."],
            get = function() return self.db.profile.show[8] end,
            set = function(v) 
                self.db.profile.show[8] = v 
                self:OrganizeFrame(true)
            end,
        },
        ["9"] = {
            name = L["Fifth Bag"], type = 'toggle', order = 9,
            desc = L["Turns display of your fifth bag on and off."],
            get = function() return self.db.profile.show[9] end,
            set = function(v) 
                self.db.profile.show[9] = v 
                self:OrganizeFrame(true)
            end,
        },
        ["10"] = {
            name = L["Sixth Bag"], type = 'toggle', order = 10,
            desc = L["Turns display of your sixth bag on and off."],
            get = function() return self.db.profile.show[10] end,
            set = function(v) 
                self.db.profile.show[10] = v 
                self:OrganizeFrame(true)
            end,
        },
    }
	
    OneCore:CopyTable(customArgs, baseArgs.args.show.args)
	
    OneCore:LoadOptionalCommands(baseArgs, self)
	
	self:RegisterDB("OneBankDB")
	self:RegisterDefaults('profile', OneCore.defaults)
	self:RegisterChatCommand({"/obb", "/OneBank"}, baseArgs, string.upper(self.title))
	
    --self:SetDebugging(true)
	
	self.fBags = {-1, 5, 6, 7, 8, 9, 10}
    self.rBags = {10, 9, 8, 7, 6, 5, -1}

	OneBankFrameName:SetText(UnitName("player").. L["'s Bank Bags"])
	
    self.frame = OneBankFrame
	self.frame.handler = self
    
    self.frame.bagFrame = OBBBagFra
	self.frame.bagFrame.handler = self
    
    self.frame.bags = {}
    
	self.lastCounts = {}
    self.isBank = true
	
	self:RegisterDewdrop(baseArgs)
end

function OneBank:OnEnable()
	self.frame:SetClampedToScreen(true)
		
	self:RegisterEvent("BAG_UPDATE",			  function() self:UpdateBag(arg1) end)
	self:RegisterEvent("BAG_UPDATE_COOLDOWN",	  function() self:UpdateBag(arg1) end)
	
	self:RegisterEvent("BANKFRAME_OPENED", function() self.frame:Show() end)
	self:RegisterEvent("BANKFRAME_CLOSED", function() self.frame:Hide() end)
    
	self:RegisterEvent("PLAYERBANKSLOTS_CHANGED", function() 
		if not self.frame.bags[-1].colorLocked then
			for k, v in ipairs(self.frame.bags[-1]) do 
				self:SetBorderColor(v)
			end
		end
	end)
	
	if CT_oldPurchaseSlot then PurchaseSlot = CT_oldPurchaseSlot end
	self:Hook("PurchaseSlot", function() self.hooks.PurchaseSlot.orig() self.bagPurchased = true end)
    self:Hook("CloseBankFrame", function() self.frame:Hide() self.hooks.CloseBankFrame.orig() end)
    
    self:BuildFrame()
end

function OneBank:OnUpdate()
    local total, bagChanged = 0, false
    
    for i, k in self.fBags do
        local count = GetContainerNumSlots(k)
        if self.lastCounts[k] ~= count then
            self.lastCounts[k] = count
            bagChanged = true
        end
        total = total + count
    end
    
    if self.lastCount ~= total or bagChanged then
        self:BuildFrame()
        self:OrganizeFrame()
        self:DoSlotCounts()
        
        self.lastCount = total
    end
    
    if self.bagPurchased then
        self:UpdateBagSlotStatus()
    end
end

function OneBank:StartOnUpdate()
    self:ScheduleRepeatingEvent(self.title, self.OnUpdate, .25, self)
    self:UpdateBag(-1)
end

function OneBank:StopOnUpdate()
    self:CancelScheduledEvent(self.title)
end

function OneBank:UpdateBagSlotStatus() 
	local purchaseFrame = OBBBagFraPurchaseInfo
	if( purchaseFrame == nil ) then
		return
	end
	
	local numSlots,full = GetNumBankSlots()
	local button
	for i=1, NUM_BANKBAGSLOTS, 1 do
		button = getglobal("OBBBagFraBag"..i)
		if ( button ) then
			if ( i <= numSlots ) then
				SetItemButtonTextureVertexColor(button, 1.0,1.0,1.0)
				button.tooltipText = BANK_BAG
			else
				SetItemButtonTextureVertexColor(button, 1.0,0.1,0.1)
				button.tooltipText = BANK_BAG_PURCHASE
			end
		end
	end

	-- pass in # of current slots, returns cost of next slot
	local cost = GetBankSlotCost(numSlots)
	BankFrame.nextSlotCost = cost
	if( GetMoney() >= cost ) then
		SetMoneyFrameColor("OBBBagFraPurchaseInfoDetailMoneyFrame", 1.0, 1.0, 1.0)
	else
		SetMoneyFrameColor("OBBBagFraPurchaseInfoDetailMoneyFrame", 1.0, 0.1, 0.1)
	end
	MoneyFrame_Update("OBBBagFraPurchaseInfoDetailMoneyFrame", cost)

	if( full ) then
		purchaseFrame:Hide()
	else
		purchaseFrame:Show()
	end
end


function OneBank:OnCustomShow() 
    if self.db.profile.point then
        local point = self.db.profile.point
        this:ClearAllPoints()
        this:SetPoint("TOPLEFT", point.parent, "BOTTOMLEFT", point.left, point.top)
    else
        if not OneBag:IsActive() then 
            this:ClearAllPoints() 
            this:SetPoint("CENTER", UIParent, "CENTER", 0, 0) 
        else 
            this:ClearAllPoints() 
            this:SetPoint("BOTTOMLEFT", OneBagFrame, "TOPLEFT", 0, 25) 
        end
        
        
    end
    self:StartOnUpdate()
    self:UpdateBagSlotStatus()
end

function OneBank:OnCustomHide()
    CloseBankFrame()
    self:StopOnUpdate()
end
