package com.brilliance.isc.common.register.dftcre.impl;

import com.brilliance.isc.bo.Cbb;
import com.brilliance.isc.bo.Trn;
import com.brilliance.isc.bo.model.Dftcre;
import com.brilliance.isc.common.component.PtsptaToolComponent;
import com.brilliance.isc.common.register.dftcre.IDftcreRegister;
import com.brilliance.isc.vo.model.DftcreBizInfoVo;
import com.brilliance.mda.runtime.mda.util.Dates;
import com.brilliance.mda.runtime.mda.util.MdaUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("brd.dftcreRegister")
public class BrdDftcreRegister implements IDftcreRegister {

    @Autowired
    private PtsptaToolComponent ptsptaToolComponent;

    @Override
    public void setDFDfieldsfromXXX(Dftcre dftcreVo) {
        DftcreBizInfoVo rec = dftcreVo.getRec();
        dftcreVo.getDfdgrp().getRec().setPntinr(rec.getObjinr());
        dftcreVo.getDfdgrp().getRec().setPnttyp(rec.getObjtyp());
        dftcreVo.getDfdgrp().getRec().setPntref(rec.getOwnref());
        dftcreVo.getDfdgrp().getRec().setPntnam(rec.getNam());
        Cbb maxCbb = dftcreVo.getCbsMap().getOrDefault("MAX", new Cbb());
        if(!MdaUtils.isEmpty(maxCbb.getCur()) && !dftcreVo.getDfdgrp().getCbs().getMax().isModified("cur")) {
            dftcreVo.getDfdgrp().getCbs().getMax().setCur(maxCbb.getCur());
        }
        String ref = dftcreVo.getDfdgrp().getApl().getRef();
        if (ptsptaToolComponent.ptsIsRolSet(dftcreVo.getPtsptaList(), "APL")) {
            dftcreVo.getDfdgrp().setApl(MdaUtils.deepClone(ptsptaToolComponent.getPtsFromListByRol(dftcreVo.getPtsptaList(), "APL")));
        }
        dftcreVo.getDfdgrp().getApl().setRol("APL");
        dftcreVo.getDfdgrp().getApl().getPts().setRol("APL");
        if (StringUtils.isNotEmpty(ref)) {
            dftcreVo.getDfdgrp().getApl().getPts().setRef(ref);
        }
        //我行融资情况下，代付金额默认=融资的original amt；
        //我行不融资的情况下，代付金额默认=单据金额；均允许修改
        //我行融资情况下，代付起始日默认=融资开户日
        //我行不融资的情况下，代付起始日默认=交易当天
        //我行融资情况下，代付到期日默认=融资到期日；我行不融资的情况需手输
        if(!dftcreVo.getDfdgrp().getCbs().getMax().isModified("amt") ) {
            if (dftcreVo.getRec().getTrtcreVo() != null && "X".equals(dftcreVo.getRec().getTrtcreVo().getCrefinflg())) {
                dftcreVo.getDfdgrp().getCbs().getMax().setAmt(dftcreVo.getRec().getTrtcreVo().getPctoriamt());
                dftcreVo.getDfdgrp().getCbs().getMax().setCur(dftcreVo.getRec().getTrtcreVo().getOricur());
            } else {
                dftcreVo.getDfdgrp().getCbs().getMax().setAmt(maxCbb.getAmt());
                dftcreVo.getDfdgrp().getCbs().getMax().setCur(maxCbb.getCur());
            }
        }
        if(!dftcreVo.getDfdgrp().getRec().isModified("stttendat")) {
            if (dftcreVo.getRec().getTrtcreVo() != null && "X".equals(dftcreVo.getRec().getTrtcreVo().getCrefinflg())) {
                dftcreVo.getDfdgrp().getRec().setStttendat(dftcreVo.getRec().getTrtcreVo().getTrdgrp().getRec().getStttendat());
            } else {
                dftcreVo.getDfdgrp().getRec().setStttendat(Dates.today());
            }
        }
        if (!dftcreVo.getDfdgrp().getRec().isModified("matdat")) {
            if (dftcreVo.getRec().getTrtcreVo() != null && "X".equals(dftcreVo.getRec().getTrtcreVo().getCrefinflg())) {
                dftcreVo.getDfdgrp().getRec().setMatdat(dftcreVo.getRec().getTrtcreVo().getTrdgrp().getRec().getMatdat());
                int tenday = Dates.diff(dftcreVo.getDfdgrp().getRec().getMatdat(), dftcreVo.getDfdgrp().getRec().getStttendat());
                dftcreVo.getDfdgrp().getRec().setTenday(tenday);
            }
        }
    }

    @Override
    public boolean isNeedRepair(Trn trn) {
        if ("BRTSET".equals(trn.getInifrm()) || "BRTSET1".equals(trn.getInifrm())) {
            return true;
        }
        return false;
    }
}
