local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local UF = E:GetModule("UnitFrames");

--Cache global variables
--Lua functions
local pairs = pairs

function UF:Configure_CustomTexts(frame)
	local db = frame.db

	--Make sure CustomTexts are hidden if they don't exist in current profile
	for objectName, object in pairs(frame.customTexts) do
		if (not db.customTexts) or (db.customTexts and not db.customTexts[objectName]) then
			object:Hide()
			frame.customTexts[objectName] = nil
		end
	end

	if db.customTexts then
		local customFont = UF.LSM:Fetch("font", UF.db.font)
		for objectName in pairs(db.customTexts) do
			if not frame.customTexts[objectName] then
				frame.customTexts[objectName] = frame.RaisedElementParent:CreateFontString(nil, "OVERLAY")
			end

			local objectDB = db.customTexts[objectName]

			if objectDB.font then
				customFont = UF.LSM:Fetch("font", objectDB.font)
			end

			local attachPoint = self:GetObjectAnchorPoint(frame, objectDB.attachTextTo)
			E:FontTemplate(frame.customTexts[objectName], customFont, objectDB.size or UF.db.fontSize, objectDB.fontOutline or UF.db.fontOutline)
			frame.customTexts[objectName]:SetJustifyH(objectDB.justifyH or "CENTER")
			frame.customTexts[objectName]:ClearAllPoints()
			E:Point(frame.customTexts[objectName], objectDB.justifyH or "CENTER", attachPoint, objectDB.justifyH or "CENTER", objectDB.xOffset, objectDB.yOffset)

			--This takes care of custom texts that were added before the enable option was added.
			if objectDB.enable == nil then
				objectDB.enable = true
			end

			if objectDB.enable then
				frame:Tag(frame.customTexts[objectName], objectDB.text_format or "")
				frame.customTexts[objectName]:Show()
			else
				frame:Untag(frame.customTexts[objectName])
				frame.customTexts[objectName]:Hide()
			end
		end
	end
end