/**
 * 2019年10月23日
 * 移动端日期选择封装
 */
import React, { Component } from 'react';
import { DatePicker, List, Toast } from 'antd-mobile';
import moment from 'moment';

export default class MobileDate extends Component {
  constructor(props) {
    super(props);
    const value = props.value || [];

    this.state = {
      dates: value,
    };
  }

  triggerChange = changedValue => {
    // Should provide an event to pass value to Form.
    const onChange = this.props.onChange;
    // console.log(changedValue);
    if (onChange) {
      onChange([...changedValue]);
    }
  };

  componentWillReceiveProps(nextProps) {
    // Should be a controlled component.
    if ('value' in nextProps) {
      const value = nextProps.value;
      this.setState({ dates: value });
    }
  }

  handelStartChange = date => {
    const { dates } = this.state;

    if (dates.length === 0) {
      dates.push(moment(date.valueOf()));
    } else {
      if (dates.length === 2) {
        if (moment(date.valueOf()).isAfter(dates[1], 'second')) {
          Toast.fail('结束时间必须在开始时间之后', 1);
          return false;
        }
      }
      dates[0] = moment(date.valueOf());
    }

    if (!('value' in this.props)) {
      this.setState({ dates });
    }
    this.triggerChange(dates);
  };
  handelEndChange = date => {
    const { dates } = this.state;

    if (dates.length === 0) {
      dates.push(null);
      dates.push(moment(date.valueOf()));
    } else if (dates.length === 1) {
      if (dates[0].isAfter(moment(date.valueOf()), 'second')) {
        Toast.fail('结束时间必须在开始时间之后', 1);
        return false;
      }

      dates.push(moment(date.valueOf()));
    } else {
      if (dates[0].isAfter(moment(date.valueOf()), 'second')) {
        Toast.fail('结束时间必须在开始时间之后', 1);
        return false;
      }

      dates[1] = moment(date.valueOf());
    }
    if (!('value' in this.props)) {
      this.setState({ dates });
    }
    this.triggerChange(dates);
  };

  MustSpan = () => {
    const { required } = this.props;
    if (required) {
      return <span style={{ color: 'red' }}>* </span>;
    } else {
      return null;
    }
  };

  render() {
    let { dates } = this.state;
    const { format, showTime } = this.props;
    let mode = 'datetime';
    if (!showTime) {
      mode = 'date';
    }
    const startTime = dates.length > 0 ? dates[0] && dates[0].valueOf() : null;
    const endTime = dates.length > 1 ? dates[1] && dates[1].valueOf() : null;
    const MustSpan = this.MustSpan();
    // console.log(startTime, endTime, dates);
    // return null;

    return (
      <div>
        <DatePicker
          // value={this.state.date}
          extra={
            <span style={{ fontSize: 14 }}>
              {!!startTime
                ? moment(startTime).format(format ? format : 'YYYY-MM-DD HH:mm:ss')
                : '请选择时间'}
            </span>
          }
          locale={{
            okText: '确定',
            dismissText: '取消',
          }}
          value={!!startTime ? new Date(startTime) : null}
          format={format ? format : 'YYYY-MM-DD HH:mm:ss'}
          mode={mode}
          onChange={date => this.handelStartChange(date)}
        >
          <List.Item arrow="horizontal">{MustSpan}开始时间</List.Item>
        </DatePicker>
        <DatePicker
          // value={this.state.date}
          extra={
            <span style={{ fontSize: 14 }}>
              {!!endTime
                ? moment(endTime).format(format ? format : 'YYYY-MM-DD HH:mm:ss')
                : '请选择时间'}
            </span>
          }
          value={!!endTime ? new Date(endTime) : null}
          locale={{
            okText: '确定',
            dismissText: '取消',
          }}
          mode={mode}
          format={format ? format : 'YYYY-MM-DD HH:mm:ss'}
          onChange={date => this.handelEndChange(date)}
        >
          <List.Item arrow="horizontal">{MustSpan}结束时间</List.Item>
        </DatePicker>
      </div>
    );
  }
}