# Use this setup block to configure all options available in SimpleForm.
SimpleForm.setup do |config|
  config.error_notification_class = 'alert alert-danger'
  config.button_class = 'btn btn-default'
  config.boolean_label_class = nil

  config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.use :placeholder
    b.optional :maxlength
    b.optional :pattern
    b.optional :min_max
    b.optional :readonly
    b.use :label, class: 'control-label'

    b.use :input, class: 'form-control'
    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
  end

  config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.use :placeholder
    b.optional :maxlength
    b.optional :readonly
    b.use :label, class: 'control-label'

    b.use :input
    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
  end

  config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.optional :readonly

    b.wrapper tag: 'div', class: 'checkbox checkbox-primary' do |ba|
      ba.use :label_input
    end

    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
  end

  config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.optional :readonly
    b.use :label, class: 'control-label'
    b.use :input
    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
  end

  config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.use :placeholder
    b.optional :maxlength
    b.optional :pattern
    b.optional :min_max
    b.optional :readonly
    b.use :label, class: 'col-sm-3 control-label'

    b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
      ba.use :input, class: 'form-control'
      ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
      ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
    end
  end

  config.wrappers :horizontal_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.use :placeholder
    b.optional :maxlength
    b.optional :readonly
    b.use :label, class: 'col-sm-3 control-label'

    b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
      ba.use :input
      ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
      ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
    end
  end

  config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.optional :readonly

    b.wrapper tag: 'div', class: 'col-sm-offset-3 col-sm-9' do |wr|
      wr.wrapper tag: 'div', class: 'checkbox' do |ba|
        ba.use :label_input, class: 'col-sm-9'
      end

      wr.use :error, wrap_with: { tag: 'span', class: 'help-block' }
      wr.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
    end
  end

  config.wrappers :horizontal_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.optional :readonly

    b.use :label, class: 'col-sm-3 control-label'

    b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
      ba.use :input
      ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
      ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
    end
  end

  config.wrappers :inline_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
    b.use :html5
    b.use :placeholder
    b.optional :maxlength
    b.optional :pattern
    b.optional :min_max
    b.optional :readonly
    b.use :label, class: 'sr-only'

    b.use :input, class: 'form-control'
    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
  end

  # Wrappers for forms and inputs using the Bootstrap toolkit.
  # Check the Bootstrap docs (http://getbootstrap.com)
  # to learn about the different styles for forms and inputs,
  # buttons and other elements.
  config.default_wrapper = :vertical_form
  config.wrapper_mappings = {
    check_boxes: :vertical_radio_and_checkboxes,
    radio_buttons: :vertical_radio_and_checkboxes,
    file: :vertical_file_input,
    boolean: :vertical_boolean,
  }
end

# # Use this setup block to configure all options available in SimpleForm.
# # File Path: RAILS_ROOT/config/initializers/simple_form_bootstrap.rb
# SimpleForm.setup do |config|
#   config.wrappers :bootstrap, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
#     b.use :html5
#     b.use :placeholder
#     b.use :label, class: 'control-label'
#     b.use :input
#     b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
#     b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
#   end
#
#   config.wrappers :prepend, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
#     b.use :html5
#     b.use :placeholder
#     b.use :label, class: 'control-label'
#     b.wrapper tag: 'div', class: 'input-group' do |input|
#       input.wrapper tag: 'div', class: 'input-prepend' do |prepend|
#         prepend.use :input
#       end
#       input.use :hint,  wrap_with: { tag: 'span', class: 'help-block' }
#       input.use :error, wrap_with: { tag: 'span', class: 'help-inline' }
#     end
#   end
#
#   config.wrappers :append, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
#     b.use :html5
#     b.use :placeholder
#     b.use :label
#     b.wrapper tag: 'div', class: 'input-group' do |input|
#       input.wrapper tag: 'div', class: 'input-append' do |append|
#         append.use :input
#       end
#       input.use :hint,  wrap_with: { tag: 'span', class: 'help-block' }
#       input.use :error, wrap_with: { tag: 'span', class: 'help-inline' }
#     end
#   end
#   config.error_notification_class = 'alert alert-danger'
#
#   # Wrappers for forms and inputs using the Twitter Bootstrap toolkit.
#   # Check the Bootstrap docs (http://twitter.github.com/bootstrap)
#   # to learn about the different styles for forms and inputs,
#   # buttons and other elements.
#   config.default_wrapper = :bootstrap
# end
#
#
# inputs = %w[
#   CollectionSelectInput
#   DateTimeInput
#   FileInput
#   GroupedCollectionSelectInput
#   NumericInput
#   PasswordInput
#   RangeInput
#   StringInput
#   TextInput
# ]
#
# inputs.each do |input_type|
#   superclass = "SimpleForm::Inputs::#{input_type}".constantize
#
#   new_class = Class.new(superclass) do
#     def input_html_classes
#       super.push('form-control')
#     end
#   end
#
#   Object.const_set(input_type, new_class)
# end