local SUI = SUI
local module = SUI:NewModule('Component_Chatbox')
----------------------------------------------------------------------------------------------------
local popup = CreateFrame('Frame', nil, UIParent)

function module:SetPopupText(text)
	popup.editBox:SetText(text)
	popup.editBox:HighlightText(0)
	popup.editBox:GetParent():Show()
end

function module:OnInitialize()
	if SUI.DBMod.Chatbox == nil then
		SUI.DBMod.Chatbox = {
			showThreat = true,
			healthMode = 'detailed'
		}
	end
end

function module:OnEnable()
	--module:SetupLinks()
	module:BuildOptions()
	module:HideOptions()
end

function module:SetupLinks()
	local filterFunc = function(_, _, msg, ...)
		local newMsg, found =
			gsub(
			msg,
			"[^ \"£%^`¬{}%[%]\\|<>]*[^ '%-=%./,\"£%^`¬{}%[%]\\|<>%d][^ '%-=%./,\"£%^`¬{}%[%]\\|<>%d]%.[^ '%-=%./,\"£%^`¬{}%[%]\\|<>%d][^ '%-=%./,\"£%^`¬{}%[%]\\|<>%d][^ \"£%^`¬{}%[%]\\|<>]*",
			'|cffffffff|Hbcmurl~%1|h[%1]|h|r'
		)
		if found > 0 then
			return false, newMsg, ...
		end
		newMsg, found =
			gsub(
			msg,
			-- This is our IPv4/v6 pattern at the beggining of a sentence.
			'^%x+[%.:]%x+[%.:]%x+[%.:]%x+[^ "£%^`¬{}%[%]\\|<>]*',
			'|cffffffff|Hbcmurl~%1|h[%1]|h|r'
		)
		if found > 0 then
			return false, newMsg, ...
		end
		newMsg, found =
			gsub(
			msg,
			-- Mid-sentence IPv4/v6 pattern
			' %x+[%.:]%x+[%.:]%x+[%.:]%x+[^ "£%^`¬{}%[%]\\|<>]*',
			'|cffffffff|Hbcmurl~%1|h[%1]|h|r'
		)
		if found > 0 then
			return false, newMsg, ...
		end
	end

	ChatFrame_AddMessageEventFilter('CHAT_MSG_CHANNEL', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_YELL', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_GUILD', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_OFFICER', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_PARTY', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_PARTY_LEADER', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_RAID', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_RAID_LEADER', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_INSTANCE_CHAT', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_INSTANCE_CHAT_LEADER', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_SAY', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_WHISPER', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_WHISPER_INFORM', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_BN_WHISPER', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_BN_WHISPER_INFORM', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_BN_CONVERSATION', filterFunc)
	ChatFrame_AddMessageEventFilter('CHAT_MSG_BN_INLINE_TOAST_BROADCAST', filterFunc)

	-- popup:SetBackdrop({bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background-Dark",
	-- edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
	-- tile = true, tileSize = 16, edgeSize = 16,
	-- insets = {left = 1, right = 1, top = 1, bottom = 1}}
	-- )
	-- popup:SetSize(650, 40)
	-- popup:SetPoint("CENTER", UIParent, "CENTER")
	-- popup:SetFrameStrata("DIALOG")
	-- popup:Hide()

	-- popup.editBox = CreateFrame("EditBox", nil, frame)
	-- popup.editBox:SetFontObject(ChatFontNormal)
	-- popup.editBox:SetSize(610, 40)
	-- popup.editBox:SetPoint("LEFT", frame, "LEFT", 10, 0)
	-- local hide = function(f) f:GetParent():Hide() end
	-- popup.editBox:SetScript("OnEscapePressed", hide)

	-- popup.close = CreateFrame("Button", nil, frame)
	-- popup.close:SetNormalTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Up")
	-- popup.close:SetPushedTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Down")
	-- popup.close:SetHighlightTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Highlight", "ADD")
	-- popup.close:SetSize(32, 32)
	-- popup.close:SetPoint("RIGHT", frame, "RIGHT", -5, 0)
	-- popup.close:SetScript("OnClick", hide)
end

-- local SetHyperlink = ItemRefTooltip.SetHyperlink
-- function ItemRefTooltip:SetHyperlink(data, ...)
-- local isURL, link = strsplit("~", data)
-- if isURL and isURL == "bcmurl" then
-- module:SetPopupText(link)
-- else
-- SetHyperlink(self, data, ...)
-- end
-- end

function module:BuildOptions()
	SUI.opt.args['ModSetting'].args['Chatbox'] = {
		type = 'group',
		name = 'Chatbox',
		args = {}
	}
end

function module:HideOptions()
	SUI.opt.args['ModSetting'].args['Chatbox'].disabled = true
end
