package com.brilliance.isc.common.register.settle.common;

import com.brilliance.isc.common.liaallg.vo.LiaallgVo;
import com.brilliance.isc.common.register.settle.ISettleRegister;
import com.brilliance.isc.common.setglg.service.SetglgService;
import com.brilliance.isc.common.setmod.vo.SetmodVo;
import com.brilliance.isc.common.util.StringUtils;
import com.brilliance.mda.runtime.mda.util.Decimals;
import com.brilliance.mda.runtime.mda.util.MdaUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.List;

import static com.brilliance.mda.runtime.mda.Constants.NULLSTR;

@Component("liaall.settleRegister")
public class LiaallSettleRegister implements ISettleRegister {

    private static Logger log = LoggerFactory.getLogger(LiaallSettleRegister.class);

    @Autowired
    private SetglgService setglgService;

    @Override
    public void registerSettlement(SetmodVo setmod) {
        // remove old fee definitions if any
        // use registersettlement in transction or registersettlementLiaXX in SETxxD-Modules to superordinate
        List<LiaallgVo> liaallgs = setmod.getLiaall().getLiaallg();
        setglgService.setglgClrAmount(setmod.getSetglg(),"LIAALL" );
        BigDecimal amt = null;
        String bucKey = NULLSTR;
        String bucKeyCdt = NULLSTR;
        for(int  i = 0;i < liaallgs.size();i++) {
            LiaallgVo liaallg = liaallgs.get(i);
            if( MdaUtils.compareTo(liaallg.getAmt(), 0) != 0 ) {
                //在表外注册的时候注入，在表外试算的最后一步存到Liaallg里面，参考方法LiaallgService.setLiaallgInfo4Setmod
                BigDecimal setmodFactory = liaallg.getSetmodFactory();
                if(setmodFactory.compareTo(BigDecimal.ZERO) != 0) {
                    amt = Decimals.mul(liaallg.getAmt(), setmodFactory);
                    bucKey = setglgService.setglgAddAmount (setmod.getSetglg(),"LIAALL", liaallg.getRol(), liaallg.getCur(), amt, setmod.getDocamttyp(), "", "", "", "" );
                    setglgService.setglgAddAmtFldValDat (setmod.getSetglg(), "LIAALL", bucKey, liaallg.getFec().getBegdat() );
                    if(StringUtils.isNotEmpty(liaallg.getCdtrol()) ) {
                        bucKeyCdt = setglgService.setglgAddAmount (setmod.getSetglg(), "LIAALL", liaallg.getCdtrol(), liaallg.getCur(), amt.negate(), setmod.getDocamttyp(), "", "", "", "" );
                        setglgService.setglgAddAmtFldValDat (setmod.getSetglg(),"LIAALL", bucKeyCdt, liaallg.getFec().getBegdat());
                    }
                }
            }
        }
    }

}
