import Bridge from '../../components-control/util/bridge'
import { compareData } from "../../components-control/util/dataChange"
import { SIGNATURE_TABLE_NAME, BILL_GLOBAL_PARAM } from '../../constant'
import { saveBill, showCommentModal } from '../util'

export default {
  execute: function (bill, param) {
    if (bill) {
      bill = bill.dom || bill
      let curTagId = window.nros.context.getCurrTag();
      let oldObj = curTagId && GMS.oldBillDataMap[curTagId] ? GMS.oldBillDataMap[curTagId] : GMS.oldBillData;
      let flag = compareData(oldObj, bill.getBuillData()) || bill.getGlobalParam("noRunTimeFormula");
      if (flag) {
        this.approvalLogical(bill, param, this)
      } else {
        GMS.$hideContainer.$Modal.confirm({
          title: "信息提示",
          content: "信息发生变化, 是否保存",
          onOk: () => {
            saveBill(bill, param).then(() => {
              this.approvalLogical(bill, param)
            })
          },
          onCancel: () => {
          }
        })
      }
    } else {
      GMS.$hideContainer.$Message.error('缺少参数');
    }
  },
  approvalLogical: function (bill, param) {
    bill.setControlsSate(param["_control_name_"], "enable", false)
    if (param.param.actions) {
      let saveParam = {
        actions: param.param.actions,
      }
      bill.executeServerAction(saveParam, function (code, data) {
        if (code === 200) {
          this.approval(bill, param);
        } else {
          bill.setControlsSate(param["_control_name_"], "enable", true)
          GMS.$hideContainer.$message.error("操作异常请联系管理员");
        }
      }.bind(this));
    } else {
      this.approval(bill, param);
    }
  },
  approval: function (bill, param) {

    const fn = () => {

      let comments =
        bill.getGlobalParam(BILL_GLOBAL_PARAM.APPROVAL_COMMENT).suggestions
          ? bill.getGlobalParam(BILL_GLOBAL_PARAM.APPROVAL_COMMENT).suggestions
          : ''
          
      bill.clearSubDatas(SIGNATURE_TABLE_NAME)
      saveBill(bill, param).then(() => {
        GMS.$http.post(
          `/rbc/bill/action/zgh/change/work/${param.define}/bill.Basic.reject`,
          {
            approvalComments: comments,
            data: bill.getBuillData(),
            detailData: [],
          },
        ).then(
          function (response) {
            if (response.status == 200 || response.statusText == 'OK') {
              if (response.data.code != 0) {
                GMS.$hideContainer.$Message.error(response.data.message)
                return
              }
              bill.setControlsSate(param["_control_name_"], "enable", true)
              bill.setControlsSate(param["_control_name_"], "loading", false)
              let curTagId = window.nros.context.getCurrTag();
              GMS.vbus.$emit('change-form-state', { state: 'readOnly' }, curTagId)
              GMS.$hideContainer.$Message.success('驳回成功!')
              if (
                window.osConfig.appOpenMode &&
                window.osConfig.appOpenMode == "apploader"
              ) {
                GMS.$hideContainer.$portalAPI.emit('entry-tag-close')
              }
              else if (Bridge.vm) {
                Bridge.vm.modal_visible = false
              }
              window.GMS.vbus.$emit('refresh-workflow-job-view')
            }
          }.bind(this)
        )
          .catch(
            function (error) {
              bill.setControlsSate(param["_control_name_"], "loading", false)
              bill.setControlsSate(param["_control_name_"], "enable", true)
              GMS.$hideContainer.$Message.error('工作流配置错误,请联系管理员')
            }.bind(this)
          );
      })
    }

    showCommentModal(bill, param, true).then(fn).catch((error) => {
      bill.setControlsSate(param["_control_name_"], "enable", true)
      bill.setControlsSate(param["_control_name_"], "loading", false)
    })

  },
}