package com.brilliance.isc.common.transaction.check;

import com.brilliance.isc.common.setmod.vo.SetmodVo;
import com.brilliance.isc.common.util.I18nUtil;
import com.brilliance.mda.runtime.mda.util.MdaUtils;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

@Component
public class SetmodCheck implements ICheck<SetmodVo> {

    @Override
    public Map<String, String> check(SetmodVo vo) {
        Map<String, String> maps = new HashMap<>();
        maps.putAll(checkDocamtN1000(vo));
        maps.putAll(checkRedamtN1000(vo));
        return maps;
    }

    /**
     * source:setmod.0024.script
     */
//    @Check(target="docamt",order=1000)
    public Map<String, String> checkDocamtN1000(SetmodVo setmodVo) {
        Map<String, String> resultMap = new HashMap<>();
//        BigDecimal difAmt = null;
//        if (MdaUtils.compareTo(setmodVo.getDocamt(), setmodVo.getOpnamt()) > 0) {
//            difAmt = Decimals.sub(setmodVo.getDocamt(), setmodVo.getOpnamt());
//            Dynamic.sysWarningSet( SYSWRNTypeWarning, Strings.getText(MdaUtils.getI18NString("setmod","CT000308"),this.getDoccur() + " " + Formats.fmtAmount(difAmt,this.getDoccur())), "WrnDOCAMT" );
//        }
//        else
//        {
//            Dynamic.sysWarningSet( SYSWRNTypeWarning, "", "WrnDOCAMT" );
//        }
        if (MdaUtils.compareTo(setmodVo.getDocamt(), 0) < 0) {
//            ctx.setErrorMessage(MdaUtils.getI18NString("setmod", "CT000309"));
            resultMap.put("setmod.docamt", I18nUtil.getMessage("0041"));
        }
        return resultMap;
    }

    public Map<String, String> checkRedamtN1000(SetmodVo setmodVo) {
        Map<String, String> resultMap = new HashMap<>();
        if (setmodVo.getRedamt().compareTo(BigDecimal.ZERO) < 0) {
            resultMap.put("setmod.redamt", I18nUtil.getMessage("0022"));
        }
        if (setmodVo.getRedamt().compareTo(setmodVo.getDocamt()) > 0) {
            resultMap.put("setmod.redamt", I18nUtil.getMessage("0042"));
        }
        return resultMap;
    }

}
