import errorMessageUtil from "./util/errorMessageUtil";
import {initIndexZero} from '../query-actions/util/queryTag.js';
/**
 * 暂存按钮
 * 不触发校验公式 调用已有保存逻辑
 */
export default {
    defaultSaveActionName: "bill.Basic.quickSave",
    execute: function (bill, param) {
        if (bill) {
            bill.setControlsSate(param["_control_name_"], "enable", false);
            this.saveData(bill, param, this)
        }
    },
    saveData(bill, param) {
        let that = this;
        let buidData = bill.getBuillData();
        let action = bill.curForm.content.actions;
        let controlArr = action.filter((v) => v.execute === "searchBillAction");
        let detailData = [];
        let arrApi1 = [];
        if (
            controlArr.length > 0 &&
            controlArr[0].param.field &&
            controlArr[0].param.field.length > 0
        ) {
            let tableList = controlArr[0].param.field.map((v) => v.targetTableName);
            tableList = Array.from(new Set(tableList));
            tableList.forEach((v) => {
                if (buidData.hasOwnProperty(v)) {
                    for (let i = 0; i < bill.getSubData(v).length; i++) {
                        let rowDataObject = bill.getSubDataRow(v, i);
                        let obj = rowDataObject.getValue("currentRowData");
                        if (obj && obj.BILLDETAILOBJ) {
                            let billId = obj.BILLID;
                            let billName = obj.BILLNAME;
                            let billDefine = billName
                                .replace(/_E/gi, "")
                                .replace(/_R/gi, "")
                                .replace(/_A/gi, "");
                            arrApi1.push(
                                that.searchBillObj(billDefine, billId, obj.BILLDETAILOBJ)
                            );
                        } else {
                            let billId = rowDataObject.getData().BILLID.value;
                            let billName = rowDataObject.getData().BILLNAME.value;
                            let billDefine = billName
                                .replace(/_E/gi, "")
                                .replace(/_R/gi, "")
                                .replace(/_A/gi, "");
                            arrApi1.push(that.searchBillObj(billDefine, billId));
                        }
                    }
                }
            });
        }
        if (arrApi1.length > 0) {
            Promise.all(arrApi1).then((list) => {
                detailData = list;
                that.saveAsync(buidData, detailData, param, bill);
            });
        } else {
            that.saveAsync(buidData, detailData, param, bill);
        }
    },
    searchBillObj(billDefine, billId, BILLDETAILOBJ) {
        return new Promise((resolve, reject) => {
            GMS.$http.get(`/gms/bill/${billDefine}/${billId}?withSubs=true`)
                .then((data) => {
                    let obj = BILLDETAILOBJ;
                    if (data.status === 200 && data.data.code === 0) {
                        if (!BILLDETAILOBJ) {
                            obj = data.data.content;
                        }
                        obj.recver = data.data.content && data.data.content.recver;
                    }
                    obj.billDefine = billDefine;
                    resolve(obj);
                })
                .catch((error) => {
                    reject(error);
                });
        });
    },
    saveAsync(buidData, detailData, param, bill) {
        let postData = {
            data: buidData,
            detailData: detailData,
        };
        let url = `/rbc/bill/action/executed/${param.define}/${this.defaultSaveActionName}?transmission=total`;
        //let url = `/rbc/bill/action/rbcbillsave/${param.define}/${this.defaultSaveActionName}?transmission=total`;
        GMS.$http.post(url, JSON.stringify(postData), {
            headers: {post: {"Content-Type": "application/json",},},
        }).then(function (response) {
            bill.setControlsSate(param["_control_name_"], "enable", true);
            if (response.data.code === 0) {
                //存储返回回来的创建时间、修改时间
                bill.getMasterData().setValue("createTime", response.data.content.billData.createTime);
                bill.getMasterData().setValue("modifyTime", response.data.content.billData.modifyTime);
                bill.getMasterData().setValue("recver", response.data.content.billData.recver);
                bill.getMasterData().setValue("billCode", response.data.content.billData.billCode);
                const id = response.data.content.billData.id;
                initIndexZero();//处理上张下张
                GMS.vbus.$Message.success("暂存成功");
                let curTagId = window.nros.context.getCurrTag();
                GMS.vbus.$emit('change-form-state', {state: 'readOnly', billId: id},curTagId)
                GMS.vbus.$emit("saveSuccess", buidData, param);
            } else {
                response.data.message && GMS.vbus.$Message.error({
                    content: errorMessageUtil.tempSaveAction.getErrorMessage(response.data.message),
                    duration: 3
                });
            }
        }).catch((error) => {
            console.log(error)
            bill.setControlsSate(param["_control_name_"], "enable", true);
            GMS.vbus.$Message.error({
                content: errorMessageUtil.tempSaveAction.getCommonMessage(),
                duration: 3
            });
        });
    },
}