module SupportFormHelper
	class SupportFormBuilder < ActionView::Helpers::FormBuilder
		attr_reader :template
		delegate :capture, :check_box_tag, :concat, :content_tag,
			:hidden_field_tag, :params, :render,
			to: :template, private: true

		def errors
			render partial: "application/support_form/errors", locals: {form: self}
		end

		def fields(&block)
			content_tag(:ul, class: "fields", &block)
		end

		def field(**options, &block)
			content_tag(:li, **options, &block)
		end

		def radio_fieldset(legend, **options, &block)
			render partial: "application/support_form/radio_fieldset",
				locals: {form: self, legend:, options:, content: capture(&block)}
		end

		def radio_field(**options, &block)
			content_tag(:li) do
				content_tag(:label, **options, &block)
			end
		end

		def radio_grid_fieldset(*args, &block)
			radio_fieldset(*args, "data-type": "radio-grid", &block)
		end

		def thumbnail_input(method)
			render partial: "application/support_form/thumbnail_input",
				locals: {form: self, method:}
		end

		def actions(&block)
			content_tag(:section, class: "actions", &block)
		end

		def go_to_next_field(after: nil, **options, &block)
			content_tag(:label, class: "go-to-next", **options) do
				concat hidden_field_tag(:after, after) if after
				yield
			end
		end

		def go_to_next_check_box(value)
			check_box_tag "next", value, checked: params[:next] == value
		end
	end

	def support_form_with(**options, &block)
		form_with(
			builder: SupportFormBuilder,
			**options,
			class: ["support-form", options[:class]],
			&block
		)
	end
end