/* eslint react/no-multi-comp:0, no-console:0 */

import createForm from '../src/createDOMForm'

const Form = {
  props: {
    form: Object,
  },
  methods: {
    onSubmit (e) {
      e.preventDefault()
      console.log('Values of member[0].name.firstname and a[0][1].b.c[0]')
      console.log(this.form.getFieldsValue(['member[0].name.firstname', 'a[0][1].b.c[0]']))
      console.log('Values of all fields')
      console.log(this.form.getFieldsValue())

      this.form.validateFieldsAndScroll((error, values) => {
        if (!error) {
          console.log('ok', values)
        } else {
          console.log('error', error, values)
        }
      })
    },

    onChange (e) {
      console.log(e.target.value)
    },

    setField () {
      this.form.setFieldsValue({
        member: [
          {
            name: {
              firstname: 'm1 first',
              lastname: 'm1 last',
            },
          },
          {
            name: {
              firstname: 'm2 first',
              lastname: 'm2 last',
            },
          },
        ],
        a: [
          [undefined, {
            b: {
              c: ['Value of a[0][1].b.c[0]'],
            },
          }],
        ],
        w: {
          x: {
            y: {
              z: ['Value of w.x.y.z[0]'],
            },
          },
        },
      })
    },

    resetFields () {
      console.log('reset')
      this.form.resetFields()
    },
  },

  render () {
    const { getFieldDecorator, getFieldError } = this.form

    return (
      <form onSubmit={this.onSubmit}>
        <div>Member 0 firstname</div>
        {getFieldDecorator('member[0].name.firstname', {
          initialValue: '',
          rules: [{
            required: true,
            message: 'What\'s the member_0 firstname?',
          }],
        })(
          <input
            onInput={this.onChange}
          />
        )}
        <div style={{ color: 'red' }}>
          {(getFieldError('member[0].name.firstname') || []).join(', ')}
        </div>

        <div>Member 0 lastname</div>
        {getFieldDecorator('member[0].name.lastname', {
          initialValue: '',
          rules: [{
            required: true,
            message: 'What\'s the member_0 lastname?',
          }],
        })(
          <input
            onInput={this.onChange}
          />
        )}
        <div style={{ color: 'red' }}>
          {(getFieldError('member[0].name.firstname') || []).join(', ')}
        </div>

        <div>Member 1 firstname</div>
        {getFieldDecorator('member[1].name.firstname', {
          initialValue: '',
          rules: [{
            required: true,
            message: 'What\'s the member_1 fistname?',
          }],
        })(
          <input
            onInput={this.onChange}
          />
        )}
        <div style={{ color: 'red' }}>
          {(getFieldError('member[1].name.firstname') || []).join(', ')}
        </div>

        <div>Member 1 lastname</div>
        {getFieldDecorator('member[1].name.lastname', {
          initialValue: '',
          rules: [{
            required: true,
            message: 'What\'s the member_1 lastname?',
          }],
        })(
          <input
            onInput={this.onChange}
          />
        )}
        <div style={{ color: 'red' }}>
          {(getFieldError('member[1].name.firstname') || []).join(', ')}
        </div>

        <div>a[0][1].b.c[0]</div>
        {getFieldDecorator('a[0][1].b.c[0]', {
          initialValue: '',
          rules: [{
            required: true,
            message: 'What\'s a[0][1].b.c[0]?',
          }],
        })(
          <input
            onInput={this.onChange}
          />
        )}
        <div style={{ color: 'red' }}>
          {(getFieldError('a[0][1].b.c[0]') || []).join(', ')}
        </div>

        <div>w.x.y.z[0]</div>
        {getFieldDecorator('w.x.y.z[0]', {
          initialValue: '',
          rules: [{
            required: true,
            message: 'What\'s w.x.y.z[0]?',
          }],
        })(
          <input
            onInput={this.onChange}
          />
        )}
        <div style={{ color: 'red' }}>
          {(getFieldError('w.x.y.z[0]') || []).join(', ')}
        </div>

        <button onClick={this.setField}>Set field</button>
        <button onClick={this.resetFields}>Reset fields</button>
        <button>Submit</button>
      </form>
    )
  },
}

const NewForm = createForm({
  onFieldsChange (_, changedFields, allFields) {
    console.log('onFieldsChange: ', changedFields, allFields)
  },
  onValuesChange (_, changedValues, allValues) {
    console.log('onValuesChange: ', changedValues, allValues)
  },
})(Form)

export default {
  render () {
    return (<div>
      <h2>setFieldsValue</h2>
      <NewForm />
    </div>)
  },
}