import React from 'react';
import { Form, Row, Col, Input, Button, Icon } from 'antd';
import './index.less';
import Page from '@src/containers/Page';
import Block from '@src/components/Block';
import { flattenObject, formatFormError } from '@src/services/Tools';
import { asyncSMessage } from '@src/services/AsyncTools';
import { System } from '../../../stores/system';

export default class extends Page {
  initData() {
    System.getCoursePromote().then(result => {
      const { form } = this.props;
      (result.video_list || []).forEach((row, index) => {
        form.getFieldDecorator(`video_list[${index}].number`);
        form.getFieldDecorator(`video_list[${index}].percent`);
      });
      (result.vs_list || []).forEach((row, index) => {
        form.getFieldDecorator(`vs_list[${index}].number`);
        form.getFieldDecorator(`vs_list[${index}].percent`);
      });
      (result.ask_time || []).forEach((row, index) => {
        form.getFieldDecorator(`ask_time[${index}].money`);
        form.getFieldDecorator(`ask_time[${index}].hour`);
      });
      form.setFieldsValue(flattenObject(result));
      this.setState({ load: true, data: result });
    });
  }

  addLength(field, info) {
    let { data } = this.state;
    data = data || {};
    data[field] = data[field] || [];
    data[field].push(info);
    this.setState({ data });
  }

  deleteLength(field, start, length) {
    let { data } = this.state;
    data = data || {};
    data[field] = data[field] || [];
    data[field].splice(start, length);
    this.setState({ data });
  }

  changeMapValue(field, index, key, value) {
    const { data } = this.state;
    data[field] = data[field] || {};
    data[field][index] = data[field][index] || {};
    data[field][index][key] = value;
    this.setState({ data });
  }

  changeValue(field, key, value) {
    const { data } = this.state;
    data[field] = data[field] || {};
    data[field][key] = value;
    this.setState({ data });
  }

  submit() {
    const { form } = this.props;
    form.validateFields((err) => {
      if (!err) {
        const data = form.getFieldsValue();
        data.video_list = (data.video_list || []).map(row => {
          return { number: Number(row.number), percent: Number(row.percent) };
        });
        data.vs_list = (data.vs_list || []).map(row => {
          return { number: Number(row.number), percent: Number(row.percent) };
        });
        data.ask_time = (data.ask_time || []).map(row => {
          return { money: Number(row.money), hour: Number(row.hour) };
        });
        System.setCoursePromote(data)
          .then(() => {
            this.setState(data);
            asyncSMessage('保存成功');
          }).catch((e) => {
            form.setFields(formatFormError(data, e.result));
          });
      }
    });
  }

  renderVideo() {
    const { getFieldDecorator } = this.props.form;
    const { data } = this.state;
    const videos = data.video_list || [];
    return <Block>
      <h1>视频课折扣</h1>
      <Form>
        <Form.Item label='按购买课程数量计算' />
        {videos.map((row, index) => {
          return <Row>
            <Col span={2}>
              <Form.Item>
                {getFieldDecorator(`video_list[${index}].number`, {
                  rules: [
                    { required: true, message: '输入数量' },
                  ],
                })(
                  <Input placeholder={'输入数量'} onChange={(value) => {
                    this.changeMapValue('video_list', index, 'number', value);
                  }} />,
                )}
              </Form.Item>
            </Col>
            <Col span={1}>
              门
            </Col>
            <Col span={2}>
              <Form.Item>
                {getFieldDecorator(`video_list[${index}].percent`, {
                  rules: [
                    { required: true, message: '输入百分比' },
                  ],
                })(
                  <Input placeholder={'输入百分比'} onChange={(value) => {
                    this.changeMapValue('video_list', index, 'percent', value);
                  }} />,
                )}
              </Form.Item>
            </Col>
            <Col span={1}>
              %
            </Col>
            <Col span={1} onClick={() => {
              this.deleteLength('video_list', index, 1);
            }}>
              <Button><Icon type="minus" /></Button>
            </Col>
          </Row>;
        })}
        <Button onClick={() => {
          this.addLength('video_list', { number: 0, precent: 0 });
        }}><Icon type={'plus'} /></Button>
        <Form.Item labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label='促销文案'>
          {getFieldDecorator('video.text', {
            rules: [
              { required: true, message: '输入促销文案' },
            ],
          })(
            <Input placeholder='2门9折,3门88折,4门85折(套餐不享受此优惠)' onChange={(value) => {
              this.changeValue('video', 'text', value);
            }} />,
          )}
        </Form.Item>
      </Form>
    </Block>;
  }

  renderVs() {
    const { getFieldDecorator } = this.props.form;
    const { data } = this.state;
    const vss = data.vs || [];
    return <Block>
      <h1>1v1课折扣</h1>
      <Form>
        <Form.Item label='按购买课程数量计算' />
        {vss.map((row, index) => {
          return <Row>
            <Col span={2}>
              <Form.Item>
                {getFieldDecorator(`vs_list[${index}].number`, {
                  rules: [
                    { required: true, message: '输入数量' },
                  ],
                })(
                  <Input placeholder={'输入数量'} onChange={(value) => {
                    this.changeMapValue('vs_list', index, 'number', value);
                  }} />,
                )}
              </Form.Item>
            </Col>
            <Col span={1}>
              课
          </Col>
            <Col span={2}>
              <Form.Item>
                {getFieldDecorator(`vs_list[${index}].percent`, {
                  rules: [
                    { required: true, message: '输入百分比' },
                  ],
                })(
                  <Input placeholder={'输入百分比'} onChange={(value) => {
                    this.changeMapValue('vs_list', index, 'percent', value);
                  }} />,
                )}
              </Form.Item>
            </Col>
            <Col span={1}>
              %
          </Col>
            <Col span={1} onClick={() => {
              this.deleteLength('vs_list', index, 1);
            }}>
              <Button><Icon type="minus" /></Button>
            </Col>
          </Row>;
        })}
        <Button onClick={() => {
          this.addLength('vs_list', { number: 0, precent: 0 });
        }}><Icon type={'plus'} /></Button>
        <Form.Item labelCol={{ span: 3 }} wrapperCol={{ span: 16 }} label='促销文案'>
          {getFieldDecorator('vs.text', {
            rules: [
              { required: true, message: '输入促销文案' },
            ],
          })(
            <Input placeholder='满30课时95折' onChange={(value) => {
              this.changeValue('vs', 'text', value);
            }} />,
          )}
        </Form.Item>
      </Form>
    </Block>;
  }

  renderAskTime() {
    const { getFieldDecorator } = this.props.form;
    const { data } = this.state;
    const ask_time = data.ask_time || [];
    return <Block>
      <h1>课程赠品</h1>
      <Form>
        <Form.Item label='满额送回复时长服务' />
        {ask_time.map((row, index) => {
          return <Row>
            <Col span={6}>
              <Form.Item labelCol={{ span: 10 }} wrapperCol={{ span: 14 }} label='实付金额'>
                {getFieldDecorator(`ask_time[${index}].money`, {
                  rules: [
                    { required: true, message: '输入金额' },
                  ],
                })(
                  <Input placeholder={'输入金额'} onChange={(value) => {
                    this.changeMapValue('ask_time', index, 'money', value);
                  }} />,
                )}
              </Form.Item>
            </Col>
            <Col span={6}>
              <Form.Item labelCol={{ span: 10 }} wrapperCol={{ span: 14 }} label='赠送'>
                {getFieldDecorator(`ask_time[${index}].hour`, {
                  rules: [
                    { required: true, message: '输入小时' },
                  ],
                })(
                  <Input placeholder={'输入小时'} onChange={(value) => {
                    this.changeMapValue('ask_time', index, 'hour', value);
                  }} />,
                )}
              </Form.Item>
            </Col>
            <Col span={1} onClick={() => {
              this.deleteLength('ask_time', index, 1);
            }}>
              <Button><Icon type="minus" /></Button>
            </Col>
          </Row>;
        })}
        <Button onClick={() => {
          this.addLength('ask_time', { money: 0, hour: 0 });
        }}><Icon type={'plus'} /></Button>
      </Form>
    </Block>;
  }

  renderView() {
    const { tab } = this.state;
    return <div>
      {this.renderVideo()}
      {this.renderVs()}
      {this.renderAskTime()}
      <Row type="flex" justify="center">
        <Col>
          <Button type="primary" onClick={() => {
            this.submit(tab);
          }}>保存</Button>
        </Col>
      </Row>
    </div>;
  }
}