import React, { Component } from 'react';
import './index.less';
import Icon from '../Icon';

export default class Input extends Component {
  render() {
    const { className = '', onChange, placeholder, error, left, right } = this.props;
    return (
      <div className={`g-input-container ${className}`}>
        <div className={`g-input-wrapper ${error ? 'error' : ''}`}>
          {left && <div className="g-input-left">{left}</div>}
          <input className="g-input" placeholder={placeholder} onChange={data => onChange && onChange(data)} />
          {right && <div className="g-input-right">{right}</div>}
        </div>
        <div hidden={!error} className="g-input-error">
          {error}
        </div>
      </div>
    );
  }
}

export class SelectInput extends Component {
  render() {
    const { className = '', onChange, placeholder, value, selectValue, onSelect } = this.props;
    return (
      <Input
        className={className}
        left={
          <span className="g-input-left-select" onClick={() => onSelect && onSelect()}>
            {selectValue}
            <Icon type="down" />
          </span>
        }
        value={value}
        placeholder={placeholder}
        onChange={data => onChange && onChange(data)}
      />
    );
  }
}

export class VerificationInput extends Component {
  constructor(props) {
    super(props);
    this.timeKey = null;
    this.state = { loading: 0 };
  }

  componentWillUnmount() {
    if (this.timeKey) clearTimeout(this.timeKey);
  }

  onSend() {
    const { onSend, time = 60 } = this.props;
    if (onSend) {
      onSend();
    }
    this.setTime(time);
  }

  setTime(time) {
    this.setState({ loading: time });
    this.timeKey = setTimeout(() => {
      this.setTime(time - 1);
    }, 1000);
  }

  render() {
    const { loading } = this.state;
    const { className = '', onChange, placeholder, value } = this.props;
    return (
      <Input
        className={className}
        right={
          loading <= 0 ? (
            <span className="g-input-right-verification" onClick={() => this.onSend()}>
              获取验证码
            </span>
          ) : (
            <span className="g-input-right-verification-loading">等待{loading}秒</span>
          )
        }
        value={value}
        placeholder={placeholder}
        onChange={data => onChange && onChange(data)}
      />
    );
  }
}