module StripeAccountsHelper

  def generate_fieldsets(stripe_account, form_builder_object)
    str = ""
    stripe_account.fields_needed_hash.each do |k, v|
      str += generate_fields(k, v, form_builder_object, "", ['stripe', k])
    end
    str
  end

  def generate_fields(k, v, form_builder_object, str = "", parents = [])
    if v.nil?
      concat(generate_field(parents, form_builder_object.object))
    else
      k = "Date Of Birth" if k == "dob"
      str+= field_set_tag k.try(:titleize), class: k do
        v.keys.each do |key|
          concat(generate_fields(key, v[key], form_builder_object, str, parents + [key]).html_safe)
        end
      end
    end
    str
  end

  def generate_field(parents, stripe_account)
    options = {
      label: parents.last,
      field_name: ([parents[0]] + parents[1..-1].map{|a| "[#{a}]"}).join(),
      field_value: nil,
      field_type: 'text_field'
    }
    case options[:field_name]
      when "stripe[legal_entity][first_name]"
        options.merge!(field_value: stripe_account.user.name)
      when "stripe[legal_entity][last_name]"
        options.merge!(field_value: stripe_account.user.last_name)
      when "stripe[legal_entity][type]"
        options.merge!(
          label: "Account Type",
          field_type: 'select',
          field_value: options_for_select(['Individual', 'Company'])
          )
    end
    content_tag :div, class: "wrapper col-xs-12 col-sm-12 col-md-4" do
      concat(label_tag(options[:label]))
      concat(send(options[:field_type] + "_tag", options[:field_name], options[:field_value]))
    end
  end

end
