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

import { createForm } from '../index';
import { regionStyle, errorStyle } from './styles';

const Email = {
  props: {
    form: Object,
    hidden: Boolean,
  },
  render() {
    const { hidden, form } = this;
    const { getFieldProps, getFieldError, isFieldValidating } = form;
    const errors = getFieldError('email');
    const style = {
      ...regionStyle,
      display: hidden ? 'none' : '',
    };
    return (
      <div style={style}>
        <div>
          email:
          <input
            {...getFieldProps('email', {
              rules: [
                {
                  required: true,
                },
                {
                  type: 'email',
                  message: '错误的 email 格式',
                },
              ],
              hidden,
            })}
          />
        </div>

        {errors ? <div style={errorStyle}>{errors.join(',')}</div> : null}

        {isFieldValidating('email') ? <div style={errorStyle}>validating</div> : null}
      </div>
    );
  },
};

const User = {
  props: {
    form: Object,
  },
  render() {
    const { getFieldProps, getFieldError, isFieldValidating } = this.form;
    const errors = getFieldError('user');
    return (
      <div style={regionStyle}>
        <div>
          user:
          <input
            {...getFieldProps('user', {
              initialValue: 'x',
              rules: [
                {
                  required: true,
                },
              ],
            })}
          />
        </div>
        {errors ? <div style={errorStyle}>{errors.join(',')}</div> : null}

        {isFieldValidating('user') ? <div style={errorStyle}>validating</div> : null}
      </div>
    );
  },
};

const Form = {
  props: {
    form: Object,
  },
  methods: {
    onSubmit(e) {
      e.preventDefault();
      this.form.validateFields((error, values) => {
        if (!error) {
          console.log('ok', values);
        } else {
          console.log('error', error, values);
        }
      });
    },
  },

  render() {
    const { form } = this;
    const { getFieldProps, getFieldValue } = form;
    return (
      <div style={{ margin: 20 }}>
        <h2>overview</h2>
        <form onSubmit={this.onSubmit}>
          <div style={regionStyle}>
            <div>
              <label>
                remove/add user:
                <input
                  type="checkbox"
                  {...getFieldProps('remove_user', {
                    // initialValue:true,
                    valuePropName: 'checked',
                  })}
                />
              </label>
            </div>
          </div>

          {getFieldValue('remove_user') ? null : <User form={form} />}

          <div style={regionStyle}>
            <div>
              <label>
                hide/show email:
                <input
                  type="checkbox"
                  {...getFieldProps('hide_email', {
                    // initialValue:true,
                    valuePropName: 'checked',
                  })}
                />
              </label>
            </div>
          </div>

          <Email form={form} hidden={!!getFieldValue('hide_email')} />

          <div style={regionStyle}>
            <button>submit</button>
          </div>
        </form>
      </div>
    );
  },
};

export default createForm()(Form);