import _ from 'lodash'
import FormulaConstants from "@/formula/FormulaConstants";

/**
 * 子表赋值公式
 * 目前只拓展了一个部门经济分类子表赋值,后续可进行自由拓展。
 * @author fengjiansheng
 * @data 2021-09-13
 */
export default {
    execute: function () {
        console.log("s1 SetSubFieldValue")
        if (arguments && arguments[0] && arguments[0].length > 1 && arguments[1]) {
            // TODO 参数校验
            let context = arguments[1]
            let targetField = arguments[0][0]
            let targetObject = context.getTableType(targetField.FieldTableCode)
            let valueType = arguments[0][1]
            // TODO 入参校验
            if (valueType instanceof StaticDataNode && _.isNumber(valueType.StaticValue)) {
                valueType = valueType.StaticValue
            } else {
                console.error("SetSubFieldValue公式配置错误,第二个入参类型有误")
                return null
            }
            if (targetObject.type === "sub") {
                let subTableFocusOldIndex = context.getSubFocus()
                let subTableFocusData = subTableFocusOldIndex && context.getAllSubData()[targetObject.title][subTableFocusOldIndex].getData()
                let oldIndex = context.getSubFocus()
                try {
                    switch (valueType) {
                        case  FormulaConstants.billFiled.BMJJFL: {
                            let comp1 = arguments[0][2].getResult().Value;
                            let comp2 = arguments[0][3].getResult().Value;
                            let comp3 = arguments[0][4].getResult().Value;
                            let comp4 = arguments[0][5].getResult().Value;
                            if ((!_.isEmpty(comp1) || _.isNumber(comp1)) && (!_.isEmpty(comp2) || _.isNumber(comp2)) && (!_.isEmpty(comp3) || (_.isNumber(comp3)) && (!_.isEmpty(comp4) || (_.isNumber(comp4))))) {
                                if (!_.isEmpty(comp3) &&  !(_.isEqual(subTableFocusData[arguments[0][4].FieldCode.split(".")[0]]._field_old_value_, subTableFocusData[arguments[0][4].FieldCode.split(".")[0]].value))) {
                                    console.log("s2 SetSubField api")
                                    this.getMDObject({
                                        "limit": 1,
                                        "offset": 0,
                                        "pagination": true,
                                        "tableName": comp2,
                                        "code": comp3,
                                        "queryDataStructure": "ALL"
                                    }, data => {
                                        let param = {
                                            "limit": 1,
                                            "offset": 0,
                                            "pagination": true,
                                            "tableName": comp1,
                                            "code": data.rows[0][comp4].split("||")[0],
                                            "queryDataStructure": "ALL"
                                        };
                                        this.getMDObject(param, data => {
                                            let newIndex = context.getSubFocus();
                                            if (oldIndex !== newIndex) {
                                                context.setSubFocus(oldIndex)
                                            }
                                            console.log("s3 setValue")
                                            subTableFocusData[targetField.FieldCode]._field_old_value_ = subTableFocusData[targetField.FieldCode].value = data.rows[0]
                                            if (oldIndex !== newIndex) {
                                                context.setSubFocus(newIndex)
                                            }
                                            context.refreshSubDataRow(targetObject.title)
                                        }, resp => {
                                            console.error("子表赋值:SetSubFieldValue执行失败 resp:" + resp)
                                        });
                                    }, resp => {
                                        console.error("子表赋值:SetSubFieldValue执行失败 resp:" + resp)
                                    });
                                }
                            } else {
                                subTableFocusData[targetField.FieldCode]._field_old_value_ = subTableFocusData[targetField.FieldCode].value = null;
                                context.refreshSubDataRow(targetObject.title);
                            }
                            break
                        }
                        case FormulaConstants.billFiled.NULL: {
                            subTableFocusData[targetField.FieldCode]._field_old_value_ = subTableFocusData[targetField.FieldCode].value = null;
                            context.refreshSubDataRow(targetObject.title);
                            break
                        }
                        default : {
                            console.log("")
                        }
                    } 
                } catch (error) {
                    console.log(error)
                }
            } else {
                console.error("SetSubFieldValue公式配置错误,暂不支持主表字段赋值")
                return null
            }
        }
    },
    getMDObject(param, callBack, errorCallBack) {
        GMS.$http.post("/baseData/data/list", param).then(data => {
            callBack(data.data);
        }).catch((resp) => {
            errorCallBack(resp);
        });
    },
    getResultType: function () {
        return FMR.ConstDataTypes.Void;
    }
}