local Grid2 = Grid2
local L = Grid2.L

local PvP = Grid2.statusPrototype:new("pvp")
PvP.GetColor = Grid2.statusLibrary.GetColor
PvP.UpdateAllUnits = Grid2.statusLibrary.UpdateAllUnits

local IsInInstance, UnitIsPVP, UnitIsPVPFreeForAll = IsInInstance, UnitIsPVP, UnitIsPVPFreeForAll

local pvpText = L["PvP"]
local ffaText = L["FFA"]
local ffaTexture = [[Interface\TargetingFrame\UI-PVP-FFA]]
local pvpTexture = UnitFactionGroup("player") == "Horde" and [[Interface\PVPFrame\PVP-Currency-Horde]] or [[Interface\PVPFrame\PVP-Currency-Alliance]]

function PvP:UNIT_FACTION(_, unit)
	self:UpdateIndicators(unit)
end

function PvP:OnEnable()
	self:RegisterEvent("UNIT_FACTION")
	self:RegisterEvent("ZONE_CHANGED_NEW_AREA", "UpdateAllUnits")
end

function PvP:OnDisable()
	self:UnregisterEvent("UNIT_FACTION")
	self:UnregisterEvent("ZONE_CHANGED_NEW_AREA")
end

function PvP:IsActive(unit)
	if not IsInInstance() then
		return UnitIsPVP(unit) or UnitIsPVPFreeForAll(unit)
	end
end

function PvP:GetTexCoord(unit)
	if UnitIsPVP(unit) then
		return 0.05, 0.95, 0.05, 0.95
	else
		return 0.05, 0.605, 0.015, 0.57
	end
end

function PvP:GetIcon(unit)
	return UnitIsPVP(unit) and pvpTexture or ffaTexture
end

function PvP:GetText(unit)
	return UnitIsPVP(unit) and pvpText or ffaText
end

function PvP:GetPercent(unit)
	return self.dbx.color1.a, self:GetText(unit)
end

Grid2.setupFunc["pvp"] = function(baseKey, dbx)
	Grid2:RegisterStatus(PvP, {"color", "icon", "percent", "text"}, baseKey, dbx)
	return PvP
end

Grid2:DbSetStatusDefaultValue("pvp", {type = "pvp", color1 = {r = 0, g = 1, b = 1, a = 0.75}})