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

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

function getFileValueProps(value) {
  if (value && value.target) {
    return {
      value: value.target.value,
    };
  }
  return {
    value,
  };
}

function getValueFromFileEvent({ target }) {
  return {
    target,
  };
}

const Form = {
  props: {
    form: Object,
  },
  methods: {
    onSubmit(e) {
      e.preventDefault();
      this.form.validateFields((error, values) => {
        console.log(error, values);
        if (!error) {
          console.log('校验通过');
        }
      });
    },
    checkSize(rule, value, callback) {
      if (value && value.target) {
        const files = value.target.files;
        if (files[0]) {
          callback(files[0].size > 1000000 ? 'file size must be less than 1M' : undefined);
        } else {
          callback();
        }
      } else {
        callback();
      }
    },
  },

  render() {
    const { getFieldProps, getFieldError } = this.form;
    const errors = getFieldError('attachment');
    return (
      <div style={regionStyle}>
        <div>attachment:</div>
        <div>
          <input
            type="file"
            {...getFieldProps('attachment', {
              getValueProps: getFileValueProps,
              getValueFromEvent: getValueFromFileEvent,
              rules: [this.checkSize],
            })}
          />
        </div>
        <div style={errorStyle}>{errors ? errors.join(',') : null}</div>
        <button onClick={this.onSubmit}>submit</button>
      </div>
    );
  },
};

const NewForm = createForm()(Form);

export default {
  render() {
    return (
      <div>
        <h2>input[type="file"]</h2>
        <NewForm />
      </div>
    );
  },
};