local DEBUG =
function() end
-- d

local function _tr(str)
	return str
end

if not InventoryManager then InventoryManager = {} end
local IM = InventoryManager

local current_gn = nil
local sequence_count = nil

local function finish_gb_transfers()
	local result
	result = GetString(IM_BANK_OK)

	if result ~= "" then
		CHAT_SYSTEM:AddMessage(result)
	end
end

local function filter_for_gb_retrieve(data)
	if current_gn ~= data.guildbank then
		DEBUG(" -- filter_for_gb_retrieve: Item intended for different bank")
		return false
	end

	return true
end

local function finish_gb_stashes()
	IM:EventProcessBag(BAG_GUILDBANK, IM.ACTION_GB_RETRIEVE,
		filter_for_gb_retrieve,
		function(data) IM:ProcessSingleItem(false, data) end,
		finish_gb_transfers,
		EVENT_GUILD_BANK_ITEM_REMOVED,
		EVENT_CLOSE_GUILD_BANK,
		IM.settings.bankMoveDelay)
end

local function filter_for_gb_stash(data)
	if data.stolen then return false end

	if current_gn ~= data.guildbank then
		DEBUG(" -- filter_for_gb_stash: Item intended for different bank")
		return false
	end

	if IM.FCOISL:IsProtectedAction(
		IM.ACTION_SELL, -- Maybe another action.
		data.bagId,
		data.slotId,
		fence) then return false end
	return true
end

local function doStashGuildBank()
	IM:EventProcessBag(BAG_BACKPACK, IM.ACTION_GB_STASH,
		filter_for_gb_stash,
		function(data) IM:ProcessSingleItem(false, data) end,
		finish_gb_stashes,
		EVENT_GUILD_BANK_ITEM_ADDED,
		EVENT_CLOSE_GUILD_BANK,
		IM.settings.bankMoveDelay)
end

local function trySettleGuildBank(old_sequence_count)
	DEBUG("--- trySettleGuildBank: old_sequence_count=" .. old_sequence_count .. ", sequence_count=" .. sequence_count)
	if old_sequence_count ~= sequence_count then
		zo_callLater(function() trySettleGuildBank(sequence_count) end, 1000)
		return
	end

	DEBUG("No new event fired, seems we're good to go.")
	doStashGuildBank()
end

function received_event()
	local gid = GetSelectedGuildBankId()
	local gn = GetGuildName(gid)

	DEBUG(" -- received_event: gn=" .. gn .. ", current_gn = " .. (current_gn or "(nil)"))

	if gn ~= current_gn then
		current_gn = gn
		sequence_count = 0
		DEBUG("Starting settle loop...")
		zo_callLater(function() trySettleGuildBank(sequence_count) end, IM.settings.bankInitDelay + 2000)
	else
		sequence_count = sequence_count + 1
	end
end

function IM:OnGuildBankReady()
	received_event()
end

function IM:OnGuildBankOpened()
	current_gn = ""
	sequence_count = 0
	received_event()
end

EVENT_MANAGER:RegisterForEvent(InventoryManager.name, EVENT_GUILD_BANK_ITEMS_READY, function() IM:OnGuildBankReady() end)
EVENT_MANAGER:RegisterForEvent(InventoryManager.name, EVENT_OPEN_GUILD_BANK, function() IM:OnGuildBankOpened() end)