import React, { Component } from 'react';
import './index.less';
import { Drawer, Picker, List } from 'antd-mobile';
import Page from '@src/containers/Page';
import Assets from '@src/components/Assets';
import { getMap, formatDate } from '@src/services/Tools';
import Switch from '../../../components/Switch';
import Icon from '../../../components/Icon';
import { SpecialRadioGroup } from '../../../components/Radio';
import Button from '../../../components/Button';
import { TextbookQuality, TextbookSubject } from '../../../../Constant';
import { Textbook } from '../../../stores/textbook';

const TextbookSubjectMap = getMap(TextbookSubject, 'value', 'label');

class Detail extends Component {
  constructor(props) {
    super(props);
    this.state = { show: false };
  }

  render() {
    const { show, data = {} } = this.state;
    return (
      <div className="detail">
        <div className="detail-title">{data.no || 0}.{data.keyword}</div>
        <div className="detail-desc" dangerouslySetInnerHTML={{ __html: data.detail }} />
        <div className="detail-switch">
          显示答案
          <Switch size="small" checked={show} onClick={() => this.setState({ show: !show })} />
        </div>
        <div hidden={!show} className="detail-result" dangerouslySetInnerHTML={{ __html: data.content }} />
      </div>
    );
  }
}

export default class extends Page {
  initState() {
    return { pageData: [{ label: 1, value: 1 }] };
  }

  init() {
    const { search } = this.state;
    search.isOld = false;
    search.qualitys = [];
    this.setState({ search });
  }

  initData() {
    Textbook.getInfo()
      .then(result => {
        this.setState(result);
      });
    const { subject } = this.params;
    this.setState({ filter: false });
    Textbook.listTopic(Object.assign({ latest: true, subject, order: 'updateTime' }, this.state.search))
      .then(result => {
        this.setTableData(result.list, result.total);
        const pageData = [];
        let i = 0;
        let page = 1;
        while (i < result.total) {
          pageData.push({ label: page, value: page });
          i += this.state.search.size;
          page += 1;
        }
        this.setState({ pageData });
      });
  }

  prev() {
    const { search } = this.state;
    if (search.page > 1) {
      search.page -= 1;
    } else {
      return;
    }
    this.setState({ search });
    this.refresh();
  }

  next() {
    const { search, page } = this.state;

    if (search.page < Math.ceil(page.total / page.pageSize)) {
      search.page += 1;
    } else {
      return;
    }
    this.setState({ search });
    this.refresh();
  }

  changeQuality(value) {
    const { search = {} } = this.state;
    const { qualitys = [] } = search;
    const index = qualitys.indexOf(value);

    if (index >= 0) {
      qualitys.splice(index, 1);
    } else {
      qualitys.push(value);
    }
    search.qualitys = qualitys;
    this.setState({ search });
  }

  changeOld() {
    const { search = {} } = this.state;
    search.isOld = !search.isOld;

    this.setState({ search });
  }

  changeDirection(direction) {
    const { search = {} } = this.state;
    search.direction = direction;

    this.setState({ search });
  }

  changePage(page) {
    const { search = {} } = this.state;
    if (search.page === page) return;
    search.page = page;

    this.refresh();
  }

  renderView() {
    const { subject } = this.params;
    const { filter, search, pageData, list, latest = {} } = this.state;
    return (
      <Drawer
        style={{ minHeight: document.documentElement.clientHeight }}
        position="right"
        open={filter}
        sidebar={this.renderFilter()}
        onOpenChange={isOpen => this.setState({ filter: isOpen })}
      >
        <div className="title">【{TextbookSubjectMap[subject]}】{latest.startDate ? formatDate(latest.startDate, 'MMDD') : ''} 起{TextbookSubjectMap[subject]}机经整理</div>
        <div className="detail-list">
          {list.map(row => <Detail data={row} />)}
        </div>
        <div className="fixed">
          <div className="prev" onClick={() => {
            this.prev();
          }}>
            <Icon type="left" />
            Previous
          </div>
          <div className="next" onClick={() => {
            this.next();
          }}>
            Next
            <Icon type="right" />
          </div>
          <div className="page">

            <Picker title="选择页数"
              cols={1}
              value={[this.state.search.page]}
              data={pageData}
              onChange={(i) => {
                this.changePage(i[0]);
              }}><List.Item><span>跳转至</span>第{search.page}页<Assets name="down_down3" /></List.Item>
            </Picker>
          </div>
        </div>
        <div hidden={filter} className="filter-switch">
          <Assets name="setting" onClick={() => this.setState({ filter: true })} />
        </div>
      </Drawer>
    );
  }

  renderFilter() {
    const { search } = this.state;
    return (
      <div className="filter">
        <div className="body">
          <div className="item">
            <div className="label">机经质量</div>
            <div className="value">
              <SpecialRadioGroup
                list={TextbookQuality}
                values={search.qualitys}
                onChange={(value) => {
                  this.changeQuality(value);
                }}
              />
            </div>
          </div>
          <div className="item">
            <div className="label left">更新时间</div>
            <div className="value right">
              <Picker title="更新时间"
                cols={1}
                value={[this.state.search.direction]}
                data={[{ label: '由远到近', value: 'asc' }, { label: '由近到远', value: 'desc' }]}
                onChange={(i) => {
                  this.changeDirection(i[0]);
                }}><List.Item extra={false}>{search.direction === 'asc' ? '由远到近' : '由近到远'} <Assets className="arrow" name="down_down3" /></List.Item>
              </Picker>

            </div>
          </div>
          <div className="item">
            <div className="label left">看考古</div>
            <div className="value right">
              <Switch checked={search.isOld} onClick={() => {
                this.changeOld();
              }} />
            </div>
          </div>
        </div>
        <div className="footer">
          <Button radius width={90} onClick={() => {
            this.search({ page: 1 });
          }}>
            确定
          </Button>
        </div>
      </div>
    );
  }
}