local Libra = LibStub("Libra")
local Type, Version = "Utils", 2
if Libra:GetModuleVersion(Type) >= Version then return end

Libra.modules[Type] = Libra.modules[Type] or {}

local object = Libra.modules[Type]
object.api = object.api or {}
object.frame = object.frame or CreateFrame("Frame")
object.connectedRealms = object.connectedRealms or {}
object.connectedRealmsSorted = object.connectedRealmsSorted or {}

object.frame:RegisterEvent("PLAYER_LOGIN")
object.frame:SetScript("OnEvent", function(self, event, ...)
	object[event](object, ...)
	self:UnregisterEvent(event)
end)

function object:PLAYER_LOGIN()
	local _, realm = UnitFullName("player")
	self.myRealm = realm
	self.connectedRealmsSorted = {}
	for i, v in ipairs(GetAutoCompleteRealms() or {}) do
		self.connectedRealms[v] = true
		if v ~= self.myRealm then
			tinsert(self.connectedRealmsSorted, v)
		end
	end
	sort(self.connectedRealmsSorted)
	tinsert(self.connectedRealmsSorted, 1, self.myRealm)
end

function object.api:IsConnectedRealm(realm, includeOwn)
	if not realm then return end
	realm = realm:gsub("[ -]", "")
	return (realm ~= object.myRealm or includeOwn) and object.connectedRealms[realm]
end

function object.api:GetConnectedRealms()
	return object.connectedRealmsSorted
end

Libra:RegisterMethods(object.api)

Libra:RegisterModule(Type, Version)