# frozen_string_literal: true

require "blather"
require "rack"

module FormToH
	refine Blather::Stanza::X do
		def to_h
			params = Rack::Utils.default_query_parser.make_params
			fields.each do |field|
				Rack::Utils.default_query_parser.normalize_params(
					params,
					field.var,
					field.value,
					32
				)
			end
			params.to_h
		end
	end

	refine ::Hash do
		def to_fields
			map { |k, v| { var: k.to_s, value: v.to_s } }
		end

		def to_form(type)
			Blather::Stanza::Iq::X.new(type).tap do |form|
				form.fields = to_fields
			end
		end
	end
end
