package com.brilliance.isc.common.bop.service.impl;

import cn.hutool.core.date.DateUtil;
import com.brilliance.isc.common.bop.service.PblmodService;
import com.brilliance.isc.common.bop.service.Rmb2103Service;
import com.brilliance.isc.common.util.BopUtils;
import com.brilliance.isc.common.util.RmbbopUtils;
import com.brilliance.isc.common.context.BopContext;
import com.brilliance.isc.common.rmbbop.model.Tfbgrp;
import com.brilliance.isc.common.rmbbop.vo.Rmb2103;
import com.brilliance.isc.vo.model.DfdgrpVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.math.RoundingMode;


@Service("tfb")
public class Rmb2103ServiceImpl implements Rmb2103Service {
    @Autowired
    private PblmodService pblmodService;

    @Override
    public void save(Rmb2103 rmb2103) {
        pblmodService.storeAllinBusTx(rmb2103);
    }

    @Override
    public void updrmb(Rmb2103 rmb2103) {
        pblmodService.mappingRMBDataCommon(rmb2103);
        mappingRMBDataAAAAAA(rmb2103);
    }

    @Override
    public void saveSpt(Rmb2103 rmb2103) {
        BopUtils.saveSpt(rmb2103.getObjtyp() + "ADD");
    }

    private void mappingRMBDataAAAAAA(Rmb2103 rmb2103) {
        //同业代付为境内时，不申报
        Tfbgrp recgrp = rmb2103.getRecgrp();
        //业务属性
        recgrp.getAds().setTransattr("AL02");
        //是否自贸区业务
        String zmqflg = RmbbopUtils.getZmqflg();
        recgrp.getAds().setIsfreetradezone(StringUtils.equals(zmqflg, "X") ? "Y" : "N");
        //业务种类
        recgrp.getAds().setTranskind("0006");
        //是否分账核算单元
        recgrp.getAds().setIssubaccountunit(StringUtils.equals(zmqflg, "X") ? "Y" : "N");
        //融出机构类型(需调整)
        //融出行所在国家地区代码
        recgrp.getAds().setOutcountrycode(RmbbopUtils.getCountryCodeByRol("DFF"));
        DfdgrpVo dfdgrp = BopContext.getBizInfo().getDftcreVo().getDfdgrp();
        String dfuflg = dfdgrp.getRec().getDfuflg();
        //融出机构代码
        //融出机构名称
        switch (dfuflg) {
            case "1":
                recgrp.getAds().setOutorgcode("");
                recgrp.getAds().setOutorgname(BopUtils.getPtsByRol("DFF").getNam());
                break;
            case "2":
                recgrp.getAds().setOutorgcode(BopUtils.getAdrByRol("DFF").getBic());
                recgrp.getAds().setOutorgname(BopUtils.getPtsByRol("DFF").getNam());
                break;
            default:
                recgrp.getAds().setOutorgcode("");
                recgrp.getAds().setOutorgname("");
        }

//        if not IsEmpty (RECGRP\ADS\OUTCOUNTRYCODE )then
//        ExecuteDefault(RECGRP\ADS\OUTORGTYPE)
//        endif

        //融入机构代码
        recgrp.getAds().setInorgcode(RmbbopUtils.getLhanum());

        //融入行所在国家地区代码
        recgrp.getAds().setIncountrycode("CHN");

//        if not IsEmpty (RECGRP\ADS\INCOUNTRYCODE )then
//        ExecuteDefault(RECGRP\ADS\INORGTYPE)
//        endif

        //融入机构类型
        recgrp.getAds().setInorgtype("IB03");
        //融入机构名称
        recgrp.getAds().setInorgname(RmbbopUtils.getLhanam());
        //融资类型
//        {
//            $GUAFLG = GetContentN("\\DFTCRE\\DFDGRP\\REC\\GUAFLG")
//            if $GUAFLG = "0" then
//            MappingField_RMB(GetField("RECGRP\ADS\FINATYPE"), "N")
//            else
//            MappingField_RMB(GetField("RECGRP\ADS\FINATYPE"), "Y")
//            endif
//        }
        //利率期限单位
        //融资币种
//        recgrp.getAds().setFincny(RmbbopUtils.getCur());
        recgrp.getAds().setFincny(dfdgrp.getCbs().getMax().getCur());
        recgrp.getAds().setFinamt(dfdgrp.getCbs().getMax().getAmt());
        //利率重新定价期限
        //交易日，改为取当日
        recgrp.getAds().setExchangedate(DateUtil.date());
        //浮动利率基准
        //起息日
        recgrp.getAds().setFinstrdate(dfdgrp.getRec().getStttendat());
        //浮动利率加点
        if (StringUtils.equals(recgrp.getAds().getRatetype(), "RF02")) {
            recgrp.getAds().setRateaddend(dfdgrp.getRec().getFltval());
        }
        //到期日
        recgrp.getAds().setFinenddate(dfdgrp.getRec().getMatdat());
        //融资贷款状态
        recgrp.getAds().setFinstate("ST01");
        //利率
        BigDecimal actrat = dfdgrp.getRec().getActrat();
        BigDecimal divisor = new BigDecimal("100");
        recgrp.getAds().setFinrate(actrat.divide(divisor, 7, RoundingMode.HALF_UP));
        //是否联行及附属机构往来
        //利率类型
        String flttyp = dfdgrp.getRec().getFlttyp();
        recgrp.getAds().setRatetype(StringUtils.equals(flttyp, "0") ? "RF01" : "RF02");
        //逾期未还款金额
        //交易附言
    }
}

