import _ from 'lodash'
import util from './FormulaConstants'

/**
 * 金额校验 校验业务登记单主子表金额是否相等
 * @author fengjiansheng
 * @date 2021-08-29
 */
export default {
    execute: function () {
        console.log("s1 CheckAmount")
        if (arguments && arguments[0] && arguments[0].length > 1 && arguments[1]) {
            let context = arguments[1]
            let masterField = arguments[0][0]
            let masterTableObject = context.getTableType(masterField.FieldTableCode)
            if (!_.isEqual(masterTableObject.type, "master")) {
                console.error("CheckAmount公式配置错误,第一个参数需为主表金额字段")
                return false;
            }
            let masterData = context.getMasterData().getValue(masterField.FieldCode)
            let masterMoney = _.toNumber(masterData)
            let subMoneyTotal = 0
            for (let [index, data] of arguments[0].entries()) {
                if (index === 0) {
                    continue
                }
                let tempSubTableObject = context.getTableType(data.FieldTableCode)
                if (!_.isEqual(tempSubTableObject.type, "sub")) {
                    console.error("CheckAmount公式配置错误,第", (index + 1), "个参数需为子表金额字段")
                    return false;
                }
                let allSubData = context.getAllSubData()
                if (!allSubData || _.isEmpty(allSubData)) {
                    break
                }
                let tempAllSubData = context.getAllSubData()[tempSubTableObject.title]
                if (!tempAllSubData || _.isEmpty(tempAllSubData)) {
                    continue
                }
                if (tempAllSubData instanceof Array) {
                    for (const tempSubData of tempAllSubData) {
                        let tempData = tempSubData.getValue(data.FieldCode)
                        if (_.isNumber(_.toNumber(tempData))) {
                            subMoneyTotal += _.toNumber(tempData)
                        } else {
                            console.error("公式配置错误,配置字段为非金额数据")
                            return false
                        }
                    }
                }
            }
            return Math.abs(masterMoney - subMoneyTotal ) <= 0.0000001
        }
    },
    getResultType: function () {
        return FMR.ConstDataTypes.Bool
    }
}