# frozen_string_literal: true

require "delegate"
require "blather"

class ProxiedJID < SimpleDelegator
	ESCAPED = /20|22|26|27|2f|3a|3c|3e|40|5c/
	def unproxied
		Blather::JID.new(
			node.gsub(/\\(#{ESCAPED})/) { |s|
				s[1..-1].to_i(16).chr
			}
		)
	end

	def self.proxy(jid, suffix=CONFIG[:upstream_domain])
		ProxiedJID.new(
			Blather::JID.new(
				jid.stripped.to_s
					.gsub(/([ "&'\/:<>@]|\\(?=#{ESCAPED}))/) { |s|
						"\\#{s.ord.to_s(16)}"
					},
				suffix,
				jid.resource
			)
		)
	end
end
