import { h, Component } from 'preact';

// modules > lodas
import set from 'set-value';
import { forEach, bindAll } from 'lowline';

// import Input from '../components/Input.jsx'

export default class Form extends Component {
  constructor(props) {
    super(props);

    bindAll(this, ['register', 'validate']);

    this.inputs = {};
  }

  toJSON() {
    const attrs = {};

    // eslint-disable-next-line
    for (let name in this.inputs) {
      const input = this.inputs[name];

      const value = input.getValue();

      if (value) set(attrs, name, value);
    }

    return attrs;
  }

  validate() {
    let errorCount = 0;

    // eslint-disable-next-line
    for (let name in this.inputs) {
      const input = this.inputs[name];

      if (!input.isValid()) {
        if (errorCount === 0) {
          input.focus();
        }

        errorCount += 1;
      }
    }

    return !errorCount;
  }

  register(name) {
    return (input) => {
      if (input) {
        input.validation = this.validation[input.props.name];

        this.inputs[name] = input;
      } else {
        delete this.inputs[name];
      }
    };
  }

  reset() {
    forEach(this.inputs, (input) => input.reset());
  }
}
