Quantcast
local NAME, ADDON = ...

ADDON.bankController = {}
ADDON.bankController.__index = ADDON.bankController

local controller = ADDON.bankController


function controller:Init()
    ADDON.events:Add('BANKFRAME_OPENED', self)
    ADDON.events:Add('BANKFRAME_CLOSED', self)
    BankFrame:UnregisterAllEvents()
    BankFrame:SetScript('OnShow', nil)
end

function DJBagsBankBar_OnShow(self)
    BankFrame:Show()
    BankFrame.selectedTab = 1
    PanelTemplates_SetTab(self, 1)
    DJBagsBankContainer:Show()
    DJBagsReagentContainer:Hide()
    self:Update()
    controller:Register()
    controller:Update()
    controller:DepositReagents()
end

function DJBagsBankBar_OnHide(self)
    BankFrame:Hide()
    controller:UnRegister()
    CloseBankFrame()
    StaticPopup_Hide("CONFIRM_BUY_BANK_SLOT");
end

function DJBagsBankTab_OnClick(tab)
    PlaySound("igMainMenuOpen")
    PanelTemplates_SetTab(DJBagsBankBar, tab.tab)
    if tab.tab == 1 then
        DJBagsBankContainer:Show()
        DJBagsReagentContainer:Hide()
        BankFrame.selectedTab = 1
    else
        DJBagsBankContainer:Hide()
        DJBagsReagentContainer:Show()
        BankFrame.selectedTab = 2
    end
end

function controller:DepositReagents()
    if ADDON.settings:GetSettings(DJBags_TYPE_MAIN)[DJBags_SETTING_DEPOSIT_REAGENT] then
        PlaySound("igMainMenuOption");
        DepositReagentBank();
    end
end

function controller:Update()
    ADDON:UpdateBags({-1, 5, 6, 7, 8, 9, 10, 11, -3})
    DJBagsBankContainer:Arrange()
    self:ArrangeReagents()
end

function controller:OnItemsCleared()
    if DJBagsBankBar:IsVisible() then
        self:Update()
    end
end

function controller:ArrangeReagents()
    if IsReagentBankUnlocked() then
        DJBagsReagentContainer.reagentButton:Hide()
        DJBagsReagentContainer:Arrange()
    else
        DJBagsReagentContainer:SetSize(110, 35)
        DJBagsReagentContainer.reagentButton:Show()
    end
end

function controller:BANKFRAME_OPENED()
    DJBagsBankBar:Show()
end

function controller:BANKFRAME_CLOSED()
    DJBagsBankBar:Hide()
end

function controller:Register()
    ADDON.events:Add('PLAYERBANKSLOTS_CHANGED', self)
    ADDON.events:Add('BAG_UPDATE', self)
    ADDON.events:Add('INVENTORY_SEARCH_UPDATE', self)
    ADDON.events:Add('BAG_UPDATE_COOLDOWN', self)
    ADDON.events:Add('ITEM_LOCK_CHANGED', self)
    ADDON.events:Add('PLAYERREAGENTBANKSLOTS_CHANGED', self)
    ADDON.events:Add('PLAYERBANKBAGSLOTS_CHANGED', self)
    ADDON.events:Add('REAGENTBANK_PURCHASED', self)
    ADDON.events:Add('BAG_UPDATE_DELAYED', self)
end

function controller:UnRegister()
    ADDON.events:Remove('PLAYERBANKSLOTS_CHANGED', self)
    ADDON.events:Remove('BAG_UPDATE', self)
    ADDON.events:Remove('INVENTORY_SEARCH_UPDATE', self)
    ADDON.events:Remove('BAG_UPDATE_COOLDOWN', self)
    ADDON.events:Remove('ITEM_LOCK_CHANGED', self)
    ADDON.events:Remove('PLAYERREAGENTBANKSLOTS_CHANGED', self)
    ADDON.events:Remove('PLAYERBANKBAGSLOTS_CHANGED', self)
    ADDON.events:Remove('REAGENTBANK_PURCHASED', self)
    ADDON.events:Remove('BAG_UPDATE_DELAYED', self)
end

function controller:PLAYERBANKSLOTS_CHANGED()
    ADDON:UpdateBags({BANK_CONTAINER})
    DJBagsBankContainer:Arrange()
end

function controller:BAG_UPDATE(bag)
    if bag > NUM_BAG_SLOTS then
        ADDON:UpdateBags({bag})
        DJBagsBankContainer:Arrange()
    end
end

function controller:INVENTORY_SEARCH_UPDATE()
    local function updateSearch(bag)
        for slot = 1, GetContainerNumSlots(bag) do
            ADDON.cache:GetItem(bag, slot):UpdateSearch()
        end
    end

    updateSearch(-3)
    updateSearch(-1)
    updateSearch(5)
    updateSearch(6)
    updateSearch(7)
    updateSearch(8)
    updateSearch(9)
    updateSearch(10)
    updateSearch(11)
end

function controller:BAG_UPDATE_COOLDOWN()
    local function updateCooldown(bag)
        for slot = 1, GetContainerNumSlots(bag) do
            ADDON.cache:GetItem(bag, slot):UpdateCooldown()
        end
    end

    updateCooldown(-3)
    updateCooldown(-1)
    updateCooldown(5)
    updateCooldown(6)
    updateCooldown(7)
    updateCooldown(8)
    updateCooldown(9)
    updateCooldown(10)
    updateCooldown(11)
end

function controller:ITEM_LOCK_CHANGED(bag, slot)
    if (bag ~= BANK_CONTAINER and bag ~= REAGENTBANK_CONTAINER and bag <= NUM_BAG_SLOTS) or not slot then return end

    if bag == BANK_CONTAINER and slot > NUM_BANKGENERIC_SLOTS then
        _G[DJBagsBankBar:GetName() .. 'Bag' .. slot-NUM_BANKGENERIC_SLOTS]:UpdateLock()
    else
        ADDON.cache:GetItem(bag, slot):UpdateLock()
    end
end

function controller:PLAYERREAGENTBANKSLOTS_CHANGED()
    ADDON:UpdateBags({REAGENTBANK_CONTAINER})
    self:ArrangeReagents()
end

function controller:PLAYERBANKBAGSLOTS_CHANGED()
    DJBagsBankBar:Update()
end

function controller:REAGENTBANK_PURCHASED()
    self:PLAYERREAGENTBANKSLOTS_CHANGED()
end

function controller:BAG_UPDATE_DELAYED()
    DJBagsBankBar:Update()
end