local Recount = _G.Recount

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

local date = date
local math = math
local pairs = pairs
local string = string
local tonumber = tonumber

local Fights = {}
Recount.Fights = Fights

function Fights:CopyCurrentFights()
	for _, v in pairs(Recount.db2.combatants) do
		--v.Fights.LastFightData = v.Fights.CurrentFightData -- Copy current even for short fights
		Recount:ResetFightData(v.Fights["CurrentFightData"])
	end
end

function Fights:MoveFights()
	local ReuseFight

	if not Recount.db.profile.SegmentBosses or Recount.FightingLevel == -1 then
		for i = math.min(#Recount.db2.FoughtWho, Recount.db.profile.MaxFights - 1), 1, -1 do
			Recount.db2.FoughtWho[i + 1] = Recount.db2.FoughtWho[i]
		end
		Recount.db2.FoughtWho[1] = Recount.FightingWho.." "..Recount.InCombatF.."-"..date("%H:%M:%S")
	end

	for k, v in pairs(Recount.db2.combatants) do
		--ReuseFight = v.Fights.LastFightData
		ReuseFight = nil

		v.Fights.LastFightData = v.Fights.CurrentFightData

		if not Recount.db.profile.SegmentBosses or Recount.FightingLevel == -1 then
			v.FightsSaved = v.FightsSaved or 0
			if v.FightsSaved == Recount.db.profile.MaxFights then
				ReuseFight = v.Fights["Fight"..v.FightsSaved]
			end
			v.FightsSaved = v.FightsSaved or 0
			for i = math.min(v.FightsSaved, Recount.db.profile.MaxFights - 1), 1, -1 do
				v.Fights["Fight"..i + 1] = v.Fights["Fight"..i]
			end

			if v.LastFightIn == Recount.db2.FightNum then
				v.Fights["Fight1"] = v.Fights.CurrentFightData
			else
				v.Fights["Fight1"] = nil
			end

			if v.FightsSaved < Recount.db.profile.MaxFights then
				v.FightsSaved = v.FightsSaved + 1
			end
		end

		if not ReuseFight or ReuseFight == v.Fights.LastFightData then
			v.Fights["CurrentFightData"] = Recount:GetTable()
			Recount:InitFightData(v.Fights["CurrentFightData"])
		else
			Recount:ResetFightData(ReuseFight)
			v.Fights["CurrentFightData"] = ReuseFight
		end
	end

	if RecountDeathTrack then
		RecountDeathTrack:CopyFight()
	end

	--Main Window Display Cache needs to be reset should fix several bugs
	Recount:FullRefreshMainWindow() -- Elsia: Made a function for this as it's also needed for deleting combatants and refreshing when options change

	local FightNum = tonumber(string.match(Recount.db.profile.CurDataSet, "Fight(%d+)"))

	if FightNum then
		Recount.FightName = Recount.db2.FoughtWho[FightNum]
	end
end

function Fights:DeleteOverflowFights(newmax)
	for k, v in pairs(Recount.db2.combatants) do
		for i = newmax + 1, Recount.db.profile.MaxFights, 1 do
			v.Fights["Fight"..i] = nil
			Recount.db2.FoughtWho[i] = nil
			if RecountDeathTrack then
				RecountDeathTrack:DeleteDeathTrackEntry(i)
			end
		end
	end
end
