import React, { Component } from "react";
import { AutoComplete, Button, Form, Input, message, Modal, Select, Spin, Tag, Radio } from "antd";
import $ from "jquery";
import ImgList from "../../common/imgList";
import { splitUrl } from "../../tools";
import { vipYear } from "../../dataDic";

const FormItem = Form.Item;
const Option = Select.Option;
const RadioGroup = Radio.Group;

const formItemLayout = {
  labelCol: { span: 8 },
  wrapperCol: { span: 14 },
};

const PicturesWall = React.createClass({
  getInitialState() {
    return {
      previewVisible: false,
      previewImage: "",
      fileList: this.props.pictureUrl,
    };
  },
  getDefaultProps() {
    return {
      changeClick: this.modifyChange,
    };
  },
  handleCancel() {
    this.setState({ previewVisible: false });
  },
  handlePreview(file) {
    this.setState({
      previewImage: file.url || file.thumbUrl,
      previewVisible: true,
    });
  },
  handleChange(info) {
    let fileList = info.fileList;
    this.setState({ fileList });
    this.props.fileList(fileList);
  },
  componentWillReceiveProps(nextProps) {
    this.state.fileList = nextProps.pictureUrl;
  },
  render() {
    const { fileList } = this.state;
    return (
      <div style={{ display: "inline-block" }}>
        <ImgList
          domId={this.props.domId}
          uploadConfig={{
            action: globalConfig.context + "/api/admin/orderProject/uploadMemberFile",
            data: { sign: "order_invoice_file" },
            multiple: true,
            listType: "picture-card",
          }}
          onChange={(infor) => {
            this.handleChange(infor);
          }}
          fileList={fileList}
        />
      </div>
    );
  },
});

class ProjectOperationVip extends Component {
  constructor(props) {
    super(props);
    this.state = {
      commodityName: undefined,
      commodityQuantity: 1,
      patentType: 0,
      officialCost: '',
      costReduction: '',
      commodityPrice: '',
      main: '',
      taskComment: '',
      declarationBatch: '',
      ifCertificationFee: '',
      displayFees: "none",
      customerArr: [],
      patentTypeList: [],
      loading: false,
      patentTransfer: props.dataInfor ? props.dataInfor.patentTransfer : 0, //收否为专利转让 0 否 1 是
      orgCodeUrl: [],
      serviceLife: [],
      histYear: [], //已派年份
      isEdit: false,//是否可编辑
      contractTerm: [],//合同期
      addyear: undefined,//
      isGive: undefined,//是否赠送
      cPeriod: false, // 合同期是否可编辑
    }
    this.onSubmit = this.onSubmit.bind(this);
    this.httpChange = this.httpChange.bind(this);
    this.selectAuto = this.selectAuto.bind(this);
    this.setValue = this.setValue.bind(this);
    this.getOrgCodeUrl = this.getOrgCodeUrl.bind(this);
  }

  componentDidMount() {
    this.setValue();
  }

  setValue() {
    const { dataInfor, newData } = this.props;
    if (!!newData && newData.length > 0) {
      let list = []
      for (var i = 0; i < newData.length; i++) {
        if (newData[i].cSort == 6) {
          list.push({
            commodityId: newData[i].commodityId,
            commodityName: newData[i].commodityName,
          })
        }
      }
      this.setState({
        customerArr: list
      })
    }
    // if (!(dataInfor && Object.keys(dataInfor).length > 0)) {

    // } else {
    //   this.setState({
    //     fid: dataInfor.id,
    //     commodityId: dataInfor.commodityId, //项目ID
    //     commodityName: dataInfor.commodityName, //项目名称
    //     commodityQuantity: dataInfor.commodityQuantity, // 数量
    //     memberType: dataInfor.memberType.toString(),// 付款情况
    //     taskComment: dataInfor.taskComment, // 备注
    //     orgCodeUrl: dataInfor.pictureUrl ? splitUrl(dataInfor.pictureUrl, ",", globalConfig.avatarHost + "/upload") : [],// 附件
    //     yearSum: dataInfor.yearSum,//会员总服务年限
    //     serviceLife: JSON.parse(dataInfor.serviceLife) || [],//会员服务年限
    //     serviceYear: dataInfor.serviceYear,//本次派单
    //     contractTerm: JSON.parse(dataInfor.contractTerm),//合同期
    //     taskComment: dataInfor.taskComment,//项目说明
    //   });
    // }
  }
  //
  getOrgCodeUrl(e) {
    this.setState({ orgCodeUrl: e });
  }
  // 新建会员项目
  onSubmit() {

    let pictureUrl = [];
    if (this.state.orgCodeUrl.length) {
      let picArr = [];
      this.state.orgCodeUrl.map(function (item) {
        if (
          item.response &&
          item.response.data &&
          item.response.data.length
        ) {
          picArr.push(item.response.data);
        }
      });
      pictureUrl = picArr.join(",");
    }

    if (this.state.commodityId === undefined || !this.state.commodityId) {
      message.warning("服务名称不匹配!");
      return
    }
    let reg = /^([0]|[1-9][0-9]*)$/;
    if (
      !this.state.commodityQuantity ||
      !reg.test(this.state.commodityQuantity)
    ) {
      message.warning("请输入正确商品数量!");
      return
    }
    if (this.state.memberType === undefined) {
      message.warning("请选择付款情况!");
      return
    }
    if (this.state.yearSum === undefined) {
      message.warning("请选择会员总服务年限!");
      return
    }
    if (this.state.serviceLife.length === 0) {
      message.warning("请添加会员服务年限!");
      return
    }
    if (this.state.serviceLife.length != this.state.yearSum) {
      message.warning("会员服务年限与总年限不符合!");
      return
    }
    if (this.state.serviceYear === undefined) {
      message.warning("请选择本次派单年份!");
      return
    }
    if (this.state.contractTerm.length === 0) {
      message.warning("请添加合同期!");
      return
    }
    if (this.state.memberType == "1" || this.state.memberType == "2") {
      if (typeof pictureUrl !== "string") {
        message.warning("请上传附件!");
        return
      }
    }
    this.setState({
      loading: true,
    });
    let infor = {
      orderNo: this.props.orderNo, //订单编号
      commodityId: this.state.commodityId, //项目编号
      commodityName: this.state.commodityName, //项目名称
      commodityQuantity: this.state.commodityQuantity, //商品数量
      commodityPrice: 0, //签单总价
      taskComment: this.state.taskComment, //服务说明
      memberType: this.state.memberType,//会员付款状态
      yearSum: this.state.yearSum,//会员总服务年限
      serviceLife: JSON.stringify(this.state.serviceLife),//会员服务年限
      serviceYear: this.state.serviceYear,//本次派单
      contractTerm: JSON.stringify(this.state.contractTerm),//合同期
      pictureUrl: pictureUrl.length ? pictureUrl : "",//附件
    }
    $.ajax({
      method: "POST",
      dataType: "json",
      crossDomain: false,
      url: globalConfig.context + "/api/admin/orderProject/addMemberProject",
      data: infor,
    }).done(
      function (data) {
        this.setState({
          loading: false,
        });
        if (!data.error.length) {
          Modal.success({
            title: '保存成功!',
            content: (
              <div>
                已提出会员项目申请!请在
                <span style={{ color: "red" }}>“订单管理-我的会员项目“</span>
                跟进查看会员项目的审核状态,审核通过,即表示添加会员项目完成!!!
              </div>),
          });
          this.props.onCancel();
        } else {
          message.warning(data.error[0].message);
        }
      }.bind(this)
    );
  }
  //
  httpChange(e) {
    this.setState({
      commodityName: e,
    });
    if (e.length >= 1) {
      this.supervisor(e);
    }
  }
  //加载(自动补全)
  supervisor(e) {
    //服务名称自动补全
    let api = "/api/admin/order/getBusinessProjectByName";
    $.ajax({
      method: "get",
      dataType: "json",
      crossDomain: false,
      url: globalConfig.context + api,
      data: {
        businessName: e,
        cname: "高新会员服务",
      },
      success: function (data) {
        let thedata = data.data;
        if (!thedata) {
          if (data.error && data.error.length) {
            message.warning(data.error[0].message);
          }
          thedata = {};
        }
        this.setState({
          customerArr: thedata,
        });
      }.bind(this),
    }).always(
      function () {

      }.bind(this)
    );
  }
  //上级主管输入框失去焦点是判断客户是否存在
  selectAuto(value) {
    const { customerArr } = this.state;
    const { newData } = this.props
    const newdataSources = JSON.stringify(customerArr) == "{}" ? [] : customerArr;
    let cid = newdataSources.find((item) => item.commodityName == value).commodityId
    this.setState({
      commodityName: value,
      commodityId: cid,
      histYear: [],
    });
    if (newData && newData.length > 0) {
      let llist = []
      for (var i = 0; i < newData.length; i++) {
        if (newData[i].commodityId == cid) {
          llist.push(newData[i].serviceYear)
        }
      }
      this.setState({
        histYear: llist
      })
      for (var j = newData.length - 1; j >= 0; j--) {
        if (newData[j].commodityId == cid) {
          this.setState({
            memberType: !newData[j].memberType ? undefined : newData[j].memberType.toString(), // 付款情况
            yearSum: newData[j].yearSum.toString(), // 会员总服务年限
            serviceLife: !newData[j].serviceLife ? [] : JSON.parse(newData[j].serviceLife), // 会员服务年限
            contractTerm: !newData[j].contractTerm ? [] : JSON.parse(newData[j].contractTerm), // 合同期
            taskComment: newData[j].taskComment, // 项目说明
            // isEdit: true, // 不可编辑
            isEdit: true, // 同一会员项目有且只有一条时可编辑   其他情况不可编辑
            cPeriod: !newData[j].contractTerm ? false : true, //合同期
          })
          return
        } else {
          this.setState({
            yearSum: undefined,
            serviceLife: [],
            contractTerm: [],
            taskComment: undefined,
            isEdit: false, // 可编辑
            cPeriod: false,
          })
        }
      }
    }
  }

  handleClose(removedTag) {
    let serviceLife = this.state.serviceLife.filter(tag => { return tag !== removedTag });
    this.setState({ serviceLife, serviceYear: undefined });
  }


  render() {
    let options = this.state.customerArr.map((group, index) => (
      <Select.Option key={index} value={group.commodityName}>
        {group.commodityName}
      </Select.Option>
    ));
    let contList = vipYear.map(its => (
      <Option key={its}>{its}</Option>
    ));
    const { readOnly } = this.props;
    const { histYear, isEdit } = this.state
    return (
      <Modal
        maskClosable={false}
        visible={this.props.visible}
        onOk={this.props.onCancel}
        onCancel={this.props.onCancel}
        width="1200px"
        title={readOnly ? "会员详情" : !this.state.fid ? "添加会员项目" : "编辑会员项目"}
        footer=""
        className="admin-desc-content"
      >
        <Form
          layout="horizontal"
        >
          <Spin spinning={this.state.loading}>
            <div className="clearfix">
              <FormItem
                className="half-item"
                {...formItemLayout}
                label="服务名称"
              >
                {readOnly ? this.state.commodityName :
                  // <AutoComplete
                  //   className="certain-category-search"
                  //   dropdownClassName="certain-category-search-dropdown"
                  //   dropdownMatchSelectWidth={false}
                  //   style={{ width: "200px" }}
                  //   dataSource={options}
                  //   placeholder="输入服务名称"
                  //   value={this.state.commodityName}
                  //   onChange={this.httpChange}
                  //   filterOption={true}
                  //   onSelect={this.selectAuto}
                  // >
                  //   <Input />
                  // </AutoComplete>
                  <Select
                    style={{ width: '200px' }}
                    placeholder="输入服务名称"
                    value={this.state.commodityName}
                    onChange={this.selectAuto}
                  >
                    {options}
                  </Select>
                }
                {!readOnly && <span className="mandatory">*</span>}
              </FormItem>
              <FormItem
                className="half-item"
                {...formItemLayout}
                label="服务数量"
              >
                {readOnly ? this.state.commodityQuantity :
                  <Input
                    placeholder="请输入服务数量"
                    value={this.state.commodityQuantity}
                    style={{ width: "200px" }}
                    disabled={true}
                    onChange={(e) => {
                      this.setState({ commodityQuantity: e.target.value });
                    }}
                    ref="commodityQuantity"
                  />}
                {!readOnly && <span className="mandatory">*</span>}
                <div
                  style={{
                    color: "red",
                    position: "relative",
                    left: "0"
                  }}
                >注:会员项目单次限制,只能派一年</div>
              </FormItem>
              <FormItem
                className="half-item"
                {...formItemLayout}
                label="付款情况"
              >
                {readOnly ?
                  [
                    { value: "0", key: "已付会员节点全款" },
                    { value: "1", key: "已付部分期款,需特批" },
                    { value: "2", key: "未付款,需特批" }][this.state.memberType] :
                  <Select
                    placeholder="选择付款情况"
                    style={{ width: "200px" }}
                    value={this.state.memberType}
                    onChange={(e) => {
                      this.setState({ memberType: e });
                    }}
                  >
                    {[
                      { value: "0", key: "已付会员节点全款" },
                      { value: "1", key: "已付部分期款,需特批" },
                      { value: "2", key: "未付款,需特批" }].map(function (item) {
                        return (
                          <Select.Option key={item.value}>
                            {item.key}
                          </Select.Option>
                        );
                      })}
                  </Select>}
                {!readOnly && <span className="mandatory">*</span>}
              </FormItem>
              <FormItem
                className="half-item"
                {...formItemLayout}
                label="会员总服务年限"
              >
                {readOnly ?
                  !this.state.yearSum ? "" :
                    [
                      { value: "0", key: "" },
                      { value: "1", key: "一年" },
                      { value: "2", key: "二年" },
                      { value: "3", key: "三年" },
                      { value: "4", key: "四年" },
                      { value: "5", key: "五年" },
                    ][this.state.yearSum]["key"] :
                  <Select
                    placeholder="请选择会员总服务年限"
                    disabled={isEdit}
                    style={{ width: "200px" }}
                    value={this.state.yearSum}
                    onChange={(e) => {
                      this.setState({
                        yearSum: e,
                        serviceLife: [],
                        serviceYear: undefined,
                      });
                    }}
                  >
                    {[
                      { value: "1", key: "一年" },
                      { value: "2", key: "二年" },
                      { value: "3", key: "三年" },
                      { value: "4", key: "四年" },
                      { value: "5", key: "五年" },
                    ].map(function (item) {
                      return (
                        <Select.Option key={item.value}>
                          {item.key}
                        </Select.Option>
                      );
                    })}
                  </Select>}
                {!readOnly && <span className="mandatory">*</span>}
              </FormItem>
              <FormItem
                className="half-item"
                {...formItemLayout}
                label="会员服务年限"
              >
                <div>
                  {
                    this.state.serviceLife.map((tag) =>
                      <Tag closable={!isEdit} key={tag} afterClose={() => this.handleClose(tag)}>
                        {tag}
                      </Tag>
                    )
                  }
                  {
                    !isEdit && (this.state.serviceLife.length < this.state.yearSum) &&
                    <Button
                      size="small"
                      type="primary"
                      onClick={() => {
                        this.setState({
                          addYears: true,
                          addyear: undefined,
                          isGive: undefined,
                        })
                      }}>
                      + 添加服务年限
                    </Button>
                  }
                </div>
                {/* {
                  readOnly ?
                    this.state.serviceLife.toString() :
                    <Select
                      disabled={isEdit}
                      mode="multiple"
                      style={{ width: '200px' }}
                      placeholder="请选择服务年限"
                      value={this.state.serviceLife}
                      onChange={(e) => {
                        this.setState({
                          serviceLife: e,
                          serviceYear: undefined,
                        })
                      }}
                    >
                      {contList}
                    </Select>
                } */}
                {/* {!readOnly && <span className="mandatory">*</span>} */}
              </FormItem>
              <FormItem
                className="half-item"
                {...formItemLayout}
                label="本次派单"
              >
                {readOnly ?
                  this.state.serviceYear :
                  <Select
                    placeholder="请选择本次派单年份"
                    style={{ width: "200px" }}
                    value={this.state.serviceYear}
                    onChange={(e) => {
                      this.setState({ serviceYear: e });
                    }}
                  >
                    {this.state.serviceLife.length > 0 && this.state.serviceLife.map(function (item) {
                      return (
                        <Select.Option key={item} disabled={histYear.includes(item)}>
                          {item}
                        </Select.Option>
                      );
                    })}
                  </Select>}
                {!readOnly && <span className="mandatory">*</span>}
              </FormItem>
              <FormItem
                className="half-item"
                {...formItemLayout}
                label="合同期"
              >
                {
                  readOnly ?
                    this.state.contractTerm.toString() :
                    <Select
                      mode="multiple"
                      style={{ width: '200px' }}
                      placeholder="请选择合同期"
                      disabled={this.state.cPeriod}
                      value={this.state.contractTerm}
                      onChange={e => {
                        this.setState({
                          contractTerm: e,
                        })
                      }}
                    >
                      {contList}
                    </Select>
                }
                {!readOnly && <span className="mandatory">*</span>}
              </FormItem>
              {
                (this.state.memberType == "1" || this.state.memberType == "2") &&
                <div className="clearfix">
                  <FormItem
                    labelCol={{ span: 4 }}
                    wrapperCol={{ span: 16 }}
                    label="上传附件"
                  >
                    <PicturesWall
                      domId={'vip'}
                      fileList={this.getOrgCodeUrl}
                      pictureUrl={this.state.orgCodeUrl}
                    />
                    {!readOnly && <span className="mandatory">*</span>}
                  </FormItem>
                  <div style={{ color: "red", marginLeft: 144, marginBottom: 15 }}>
                    特批需上传附件图,请上传客户同意我方继续服务并安排给我司付款的聊天记录截图,
                    <p>若没有客户同意继续服务及会安排付款的截图,特派流程将无法走下去,以免造成派单耽搁</p>
                  </div>
                </div>
              }
              <div className="clearfix">
                <FormItem
                  labelCol={{ span: 4 }}
                  wrapperCol={{ span: 16 }}
                  label="项目说明"
                >
                  {readOnly ? this.state.taskComment :
                    <Input
                      type="textarea"
                      placeholder=""
                      autosize={{ minRows: 4 }}
                      value={this.state.taskComment}
                      onChange={(e) => {
                        this.setState({ taskComment: e.target.value });
                      }}
                    />}
                </FormItem>
                {/* <div style={{ color: "red", marginLeft: 144 }}>
                  请详细说明项目服务时间,总服务时间及付款情况,如:<span style={{ color: "#333" }}>派2022年会员服务,总会员服务三年,客户付款情况说明</span>
                  <p>未付款时,需进行特批审核,请详细说明预计付款时间等详细情况</p>
                </div> */}
              </div>
              {readOnly ? null : <FormItem
                wrapperCol={{ span: 12, offset: 4 }}
                className="half-middle"
              >
                <Button
                  className="submitSave"
                  type="primary"
                  onClick={() => {
                    if (!this.state.fid) {
                      this.onSubmit()
                    } else {
                      // this.onChange()
                    }
                  }}
                >
                  保存
                </Button>
                <Button
                  className="submitSave"
                  type="ghost"
                  onClick={this.props.onCancel}
                >
                  取消
                </Button>
              </FormItem>}
            </div>
          </Spin>
        </Form>
        {
          this.state.addYears &&
          <Modal
            title="添加服务年限"
            visible={this.state.addYears}
            okText="添加"
            onOk={() => {
              if (!this.state.addyear) {
                message.warn("请选择年份!")
                return
              }
              if (this.state.isGive == undefined) {
                message.warn("请选择是否赠送!")
                return
              }
              let slist = this.state.serviceLife
              if (this.state.isGive == 0) {
                slist.push(this.state.addyear)
              } else if (this.state.isGive == 1) {
                let newYear = this.state.addyear + "(赠)"
                slist.push(newYear)
              }
              this.setState({
                serviceLife: slist,
                addYears: false
              })
            }}
            onCancel={() => {
              this.setState({
                addYears: false
              })
            }}
          >
            <Select
              style={{ width: '200px', marginRight: 50 }}
              placeholder="请选择年份"
              onChange={e => {
                this.setState({
                  addyear: e,
                })
              }}
            >
              {
                vipYear.map(its => (
                  <Option
                    key={its}
                    disabled={this.state.serviceLife.toString().includes(its)}
                  >{its}</Option>
                ))
              }
            </Select>
            <RadioGroup
              onChange={e => {
                this.setState({
                  isGive: e.target.value
                })
              }}
              value={this.state.isGive}
            >
              <Radio value={0}>非赠送</Radio>
              <Radio value={1}>赠送</Radio>
            </RadioGroup>
          </Modal>
        }
      </Modal>
    )
  }
}

export default ProjectOperationVip;