BorrowerAndLender = {}
LibStub("AceTimer-3.0"):Embed(BorrowerAndLender)
local LAM = LibStub:GetLibrary("LibAddonMenu-1.0")

local originalLevel
local inBank
local control = ZO_OptionsWindow.controlTable[2][9]
local currentLevels
local currentWait = nil
local settings

function EndsWith(String,End)
   return End=='' or string.sub(String,-string.len(End))==End
end

local function Hush()
	if control.currentChoice ~= 0 then
		currentLevels = control.currentChoice or control.value
		SetSetting(control.system, control.settingId, 0)
	end
end

local function SpeakUpLad()
	if currentWait then BorrowerAndLender:CancelTimer(currentWait) end
	currentWait = nil
	control.currentChoice = currentLevels or settings.defaultSoundLevel
	SetSetting(control.system, control.settingId, control.currentChoice)
end

local function WhoAmI(eventCode, options)
	if EndsWith(ZO_ChatterOption1:GetText(), GetString(SI_INTERACT_OPTION_BANK)) then
		if currentWait then BorrowerAndLender:CancelTimer(currentWait) end
		currentWait = BorrowerAndLender:ScheduleTimer(SpeakUpLad, (#ZO_InteractWindowTargetAreaBodyText:GetText()/15) + 5)
		Hush()
	end
end

local function FilterNPC(eventCode, channel, npc, chat)
	if channel ~= CHAT_CHANNEL_MONSTER_SAY and channel ~= CHAT_CHANNEL_MONSTER_YELL then return end

	if not settings.chats[npc] then settings.chats[npc] = {} end
	if not settings.chats[npc][chat] then settings.chats[npc][chat] = 0 return end

	settings.chats[npc][chat] =  settings.chats[npc][chat] + 1

	if currentWait then BorrowerAndLender:CancelTimer(currentWait) end

	currentWait = BorrowerAndLender:ScheduleTimer(SpeakUpLad, (#chat/15) + 2)
	Hush()
end

local function BorrowerAndLenderLoaded(eventCode, addOnName)

	if(addOnName ~= "BorrowerAndLender") then
        return
    end

	local defaults = {
		chats = {},
		defaultSoundLevel = control.currentChoice or control.value or 0
	}

	settings = ZO_SavedVars:NewAccountWide("BorrowerAndLender_Settings", 1, nil, defaults)

	local panel = LAM:CreateControlPanel("BAL", "Borrower And Lender")

	LAM:AddHeader(panel, "BAL_General", "Settings")

  	LAM:AddSlider(panel, "defaultSound", "Set the standard voice over volume ",
						"Set this value to your standard voice over volume",
						0, 100, 1, function() return settings.defaultSoundLevel end,
						function(value) settings.defaultSoundLevel = value end)


	EVENT_MANAGER:RegisterForEvent("BALWho", EVENT_CHATTER_BEGIN, WhoAmI)
	EVENT_MANAGER:RegisterForEvent("BALWho", EVENT_CHATTER_END, SpeakUpLad)
	EVENT_MANAGER:RegisterForEvent("BALChat", EVENT_CHAT_MESSAGE_CHANNEL, FilterNPC)
end


EVENT_MANAGER:RegisterForEvent("BorrowerAndLenderLoaded", EVENT_ADD_ON_LOADED, BorrowerAndLenderLoaded)