local spellMemory
local classSpellMemory
local PLAYER_CLASS = select(2,UnitClass("player"))

local function GetSpellMemory()
	if not spellMemory then
		WhatsNext.db.global.spellMemory = {}
		spellMemory = WhatsNext.db.global.spellMemory
	end
	return spellMemory
end

local function GetClassSpellMemory(class)
	classSpellMemory = GetSpellMemory()[class or PLAYER_CLASS]
	if not classSpellMemory then
		classSpellMemory = {}
		GetSpellMemory()[class or PLAYER_CLASS] = classSpellMemory
	end
	return classSpellMemory
end

local tempSpellID
function WhatsNext:GetSpellID(spellName)
	tempSpellID = tonumber(spellName) or select(2,GetSpellBookItemInfo(spellName)) or GetClassSpellMemory()[spellName]
	if not tempSpellID then
		for _,spellTable in pairs(GetSpellMemory()) do
			if spellTable[spellName] then
				return spellTable[spellName]
			end
		end
	end
	return tempSpellID
end

local events = {}
local status, damage
function events:UNIT_SPELLCAST_SUCCEEDED(unit,spellName,_,lineID,spellID) 
	tempSpellID = select(2,GetSpellBookItemInfo(spellName)) or GetClassSpellMemory(UnitClass(unit))[spellName]
	if not tempSpellID or tempSpellID ~= spellID then
		GetClassSpellMemory(UnitClass(unit))[spellName] = spellID
	end
end

local function EventFunc(self, event, ...)
	events[event](event, ...)
end
local eventHandler = CreateFrame("Frame", nil, WorldFrame)
eventHandler:SetScript("OnEvent", EventFunc)
for eventname in pairs(events) do eventHandler:RegisterEvent(eventname) end	