local Recount = _G.Recount

local AceLocale = LibStub("AceLocale-3.0")
local L = AceLocale:GetLocale( "Recount" )

local revision = tonumber(string.sub("$Revision: 1472 $", 12, -3))
if Recount.Version < revision then
	Recount.Version = revision
end

local GameTooltip = GameTooltip

local dbCombatants
local srcRetention
local dstRetention

local DetailTitles = { }
DetailTitles.CC = {
	TopNames = L["Broke"],
	TopCount = "",
	TopAmount = L["Count"],
	BotNames = L["Broke On"],
	BotMin = "",
	BotAvg = "",
	BotMax = "",
	BotAmount = L["Count"]
}

-- Resike: This module needs an update badly.
local CCId = {
	[118]	= true, -- Polymorph (rank 1)
	[12824]	= true, -- Polymorph (rank 2)
	[12825]	= true, -- Polymorph (rank 3)
	[12826]	= true, -- Polymorph (rank 4)
	[28272]	= true, -- Polymorph (rank 1:pig)
	[28271]	= true, -- Polymorph (rank 1:turtle)
	[9484]	= true, -- Shackle Undead (rank 1)
	[9485]	= true, -- Shackle Undead (rank 2)
	[10955]	= true, -- Shackle Undead (rank 3)
	[3355]	= true, -- Freezing Trap Effect (rank 1)
	[14308]	= true, -- Freezing Trap Effect (rank 2)
	[14309]	= true, -- Freezing Trap Effect (rank 3)
	[2637]	= true, -- Hibernate (rank 1)
	[18657]	= true, -- Hibernate (rank 2)
	[18658]	= true, -- Hibernate (rank 3)
	[6770]	= true, -- Sap (rank 1)
	[2070]	= true, -- Sap (rank 2)
	[11297]	= true, -- Sap (rank 3)
	[6358]	= true, -- Seduction (Succubus)
}

function Recount:SpellAuraBroken(timestamp, eventtype, srcGUID, srcName, srcFlags, dstGUID, dstName, dstFlags, spellId, spellName, spellSchool, extraSpellId, extraSpellName, extraSpellSchool)
	if not spellName then
		spellName = "Melee"
	end

	local ability
	if extraSpellName then
		ability = spellName .. " (" .. extraSpellName .. ")"
	else
		ability = spellName .." (Melee)"
	end

	if CCId[spellId] then
		Recount:AddCCBreaker(srcName, dstName, ability, srcGUID, srcFlags, dstGUID, dstFlags, extraSpellId)
	end
end

function Recount:AddCCBreaker(source, victim, ability, srcGUID, srcFlags, dstGUID, dstFlags)
	-- Friendly fire interrupt? (Duels)
	local FriendlyFire = Recount:IsFriendlyFire(srcFlags, dstFlags)
	-- Before any further processing need to check if we are going to be placed in combat or in combat
	if not Recount.InCombat and Recount.db.profile.RecordCombatOnly then
		if (not FriendlyFire) and (Recount:InGroup(srcFlags) or Recount:InGroup(dstFlags)) then
			Recount:PutInCombat()
		else
			return
		end
	end

	-- Name and ID of pet owners
	local sourceowner
	local sourceownerID
	local victimowner
	local victimownerID

	source, sourceowner, sourceownerID = Recount:DetectPet(source, srcGUID, srcFlags)
	victim, victimowner, victimownerID = Recount:DetectPet(victim, dstGUID, dstFlags)


	srcRetention = Recount.srcRetention
	if srcRetention then

		if not dbCombatants[source] then
			Recount:AddCombatant(source, sourceowner, srcGUID, srcFlags, sourceownerID)
		end -- Elsia: Until here is if pets heal anybody.
		local sourceData = dbCombatants[source]
		if sourceData then

			Recount:SetActive(sourceData)

			-- Fight tracking purposes to speed up leaving combat
			sourceData.LastFightIn = Recount.db2.FightNum
			if not FriendlyFire then
				Recount:AddAmount(sourceData, "CCBreak", 1)
				Recount:AddTableDataSum(sourceData, "CCBroken", ability, victim, 1)
			end
		end
	end


	dstRetention = Recount.dstRetention
	if dstRetention then

		if not dbCombatants[victim] then
			Recount:AddCombatant(victim, victimowner, dstGUID, dstFlags, victimownerID)
		end
		local victimData = dbCombatants[victim]
		if victimData then
			Recount:SetActive(victimData)

			-- Fight tracking purposes to speed up leaving combat
			victimData.LastFightIn = Recount.db2.FightNum
		end
	end
end

local DataModes = { }

function DataModes:PolyBreak(data, num)
	if not data then
		return 0
	end
	if num == 1 then
		return (data.Fights[Recount.db.profile.CurDataSet].CCBreak or 0)
	end
	return (data.Fights[Recount.db.profile.CurDataSet].CCBreak or 0), {{data.Fights[Recount.db.profile.CurDataSet].CCBroken, " "..L["CC Breaking"], DetailTitles.CC}}
end

local TooltipFuncs = { }

function TooltipFuncs:CCBroken(name, data)
	--local SortedData, total
	GameTooltip:ClearLines()
	GameTooltip:AddLine(name)
	Recount:AddSortedTooltipData(L["Top 3"].." "..L["CC's Broken"], data and data.Fights[Recount.db.profile.CurDataSet] and data.Fights[Recount.db.profile.CurDataSet].CCBroken, 3)
end

Recount:AddModeTooltip(L["CC Breakers"], DataModes.PolyBreak, TooltipFuncs.CCBroken, nil, nil, nil, nil)

local oldlocalizer = Recount.LocalizeCombatants
function Recount.LocalizeCombatants()
	dbCombatants = Recount.db2.combatants
	oldlocalizer()
end
