import React from 'react';
import { Button, Form, Modal, DatePicker, Input, Upload } from 'antd';
import { Link } from 'react-router-dom';
import moment from 'moment';
import './index.less';
import Page from '@src/containers/Page';
import Block from '@src/components/Block';
// import FilterLayout from '@src/layouts/FilterLayout';
// import ActionLayout from '@src/layouts/ActionLayout';
import TableLayout from '@src/layouts/TableLayout';
// import { getMap, bindSearch, formatDate } from '@src/services/Tools';
import { asyncDelConfirm, asyncSMessage } from '@src/services/AsyncTools';
// import { TextbookType } from '../../../../Constant';
import { Textbook } from '../../../stores/textbook';
import { System } from '../../../stores/system';
// import { Question } from '../../../stores/question';
// import { Slient } from '../../../stores/slient';

export default class extends Page {
  constructor(props) {
    super(props);
    this.actionList = [{
      key: 'add',
      name: '新建',
      render: (item) => {
        return <Button onClick={() => {
          linkTo('/subject/textbook/question');
        }}>{item.name}</Button>;
      },
    }];
    this.columns = [{
      title: '库头',
      dataIndex: 'startDate',
    }, {
      title: '库尾',
      dataIndex: 'endDate',
    }, {
      title: '发布次数',
      dataIndex: 'historyNumber',
      render: (text, record) => {
        return text ? <a onClick={() => {
          this.loadHistory(record);
        }}>{text}</a> : 0;
      },
    }, {
      title: '操作',
      dataIndex: 'handler',
      render: (text, record) => {
        return <div className="table-button">
          {(
            <a onClick={() => {
              this.setState({ post: record });
              this.props.form.getFieldDecorator('post.libraryId');
              this.props.form.setFieldsValue({ 'post.libraryId': record.id });
            }}>发布机经</a>
          )}
          {(
            <Link to={`/subject/textbook/question?libraryId=${record.id}`}>录入机经</Link>
          )}
        </div>;
      },
    }];
  }

  initData() {
    const { search } = this.state;
    const data = Object.assign({}, search);
    Textbook.listLibrary(data).then(result => {
      this.setTableData(result.list, result.total || 1);
    });
  }

  loadHistory(record) {
    Textbook.listHistory({ libraryId: record.id }).then(result => {
      this.setState({ history: result.list });
    });
  }

  submit() {
    this.props.form.validateFields(['add'], (err, fieldsValue) => {
      if (err) {
        return;
      }
      const data = fieldsValue.add;
      data.startDate = data.startDate.format('YYYY-MM-DD');
      asyncDelConfirm('新增确认', '是否添加新的换库?', () => {
        return Textbook.addLibrary(data).then(() => {
          asyncSMessage('添加成功!');
          this.refresh();
        });
      });
    });
  }

  submitPost() {
    this.props.form.validateFields(['post'], (err, fieldsValue) => {
      if (err) {
        return;
      }
      const data = fieldsValue.post;
      Textbook.postHistory(data).then(() => {
        asyncSMessage('发布成功!');
        this.close('post', false);
        this.refresh();
      });
    });
  }

  renderView() {
    const { getFieldDecorator, setFieldsValue, getFieldValue } = this.props.form;

    const quant = getFieldValue('post.quant') || null;
    const ir = getFieldValue('post.ir') || null;
    const rc = getFieldValue('post.rc') || null;
    return <Block flex>
      <Form layout="inline">
        <Form.Item>
          {getFieldDecorator('add.startDate', {
            initialValue: moment(new Date(), 'YYYY-mm-dd'),
          })(
            <DatePicker />,
          )}
        </Form.Item>
        <Form.Item><Button type='primary' onClick={() => {
          this.submit();
        }}>新增换库</Button></Form.Item>
      </Form>
      <TableLayout
        columns={this.tableSort(this.columns)}
        list={this.state.list}
        pagination={this.state.page}
        loading={this.props.core.loading}
        onChange={(pagination, filters, sorter) => this.tableChange(pagination, filters, sorter)}
        onSelect={(keys, rows) => this.tableSelect(keys, rows)}
        selectedKeys={this.state.selectedKeys}
      />
      {this.state.history && <Modal visible closable title='发布历史' onCancel={() => {
        this.close(false, 'history');
      }} onOk={() => {
        this.close(false, 'history');
      }}>
        {this.state.history.map(row => {
          return <p>{row.content}</p>;
        })}
      </Modal>}
      {this.state.post && <Modal visible closable title='发布机经' onCancel={() => {
        this.close(false, 'post');
      }} onOk={() => {
        this.submitPost();
      }}>
        <Form>
          {getFieldDecorator('post.libraryId')}
          <Form.Item label='请上传机经文件,并点击发布'>
            {getFieldDecorator('post.content')(
              <Input.TextArea placeholder='更新日志' />,
            )}
          </Form.Item>
          <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 15 }} label='数学机经'>
            {getFieldDecorator('post.quant')(
              <Upload
                listType="text"
                showUploadList={false}
                beforeUpload={(file) => System.uploadImage(file).then((result) => {
                  setFieldsValue({ 'post.quant': result.url });
                  return Promise.reject();
                })}
                onChange={this.handleChange}
              >
                {<div>
                  <Button>上传附件</Button> {quant && '已上传'}
                </div>}
              </Upload>,
            )}
          </Form.Item>
          <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 15 }} label='阅读机经'>
            {getFieldDecorator('post.rc')(
              <Upload
                listType="text"
                showUploadList={false}
                beforeUpload={(file) => System.uploadImage(file).then((result) => {
                  setFieldsValue({ 'post.rc': result.url });
                  return Promise.reject();
                })}
                onChange={this.handleChange}
              >
                {<div>
                  <Button>上传附件</Button> {rc && '已上传'}
                </div>}
              </Upload>,
            )}
          </Form.Item>
          <Form.Item labelCol={{ span: 4 }} wrapperCol={{ span: 15 }} label='逻辑机经'>
            {getFieldDecorator('post.ir')(
              <Upload
                listType="text"
                showUploadList={false}
                beforeUpload={(file) => System.uploadImage(file).then((result) => {
                  setFieldsValue({ 'post.ir': result.url });
                  return Promise.reject();
                })}
                onChange={this.handleChange}
              >
                {<div>
                  <Button>上传附件</Button> {ir && '已上传'}
                </div>}
              </Upload>,
            )}
          </Form.Item>
        </Form>
      </Modal>}
    </Block>;
  }
}