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

import cn.hutool.core.date.DateUtil;
import com.brilliance.isc.bo.Pty;
import com.brilliance.isc.common.bop.service.PblmodService;
import com.brilliance.isc.common.bop.service.Rmb2107Service;
import com.brilliance.isc.common.util.BopUtils;
import com.brilliance.isc.common.util.RmbbopUtils;
import com.brilliance.isc.common.codetable.service.CodetableService;
import com.brilliance.isc.common.context.BopContext;
import com.brilliance.isc.common.rmbbop.model.Tdmgrp;
import com.brilliance.isc.common.rmbbop.vo.Rmb2107;
import com.brilliance.isc.vo.remit.CpdBizInfoVo;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

@Service("tdm")
public class Rmb2107ServiceImpl implements Rmb2107Service {
    @Autowired
    private PblmodService pblmodService;
    @Autowired
    private CodetableService codetableService;

    @Override
    public void save(Rmb2107 rmb2107) {
        pblmodService.storeAllinBusTx(rmb2107);
    }

    @Override
    public void updrmb(Rmb2107 rmb2107) {
        pblmodService.mappingRMBDataCommon(rmb2107);
        mappingRMBDataAAAAAA(rmb2107);
    }

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

    private void mappingRMBDataAAAAAA(Rmb2107 rmb2107) {
        Tdmgrp recgrp = rmb2107.getRecgrp();
        CpdBizInfoVo bizInfo = (CpdBizInfoVo) BopContext.getBizInfo();
//        Getptyfields_rmb( "APL", "NAM1", $NAM1 )
//        Getptyfields_rmb( "APL", "IDCODE", $idcode )
//        Getptyfields_rmb( "APL", "JUSCOD", $juscod )
        Pty pty = RmbbopUtils.getPty("APL");
        String nam1 = pty.getNam1();
        String juscod = pty.getJuscod();
        //资金划转关系
        recgrp.getAds().setAmttransrelation("02");
        //资金划转类型

        Pair<String, BigDecimal> basic = RmbbopUtils.getBasic();
        String othacc = basic.getLeft();
//        GETBASIC_rmb( $OTHACC, $OTHAMT, $TranRol )
        //付款人账号
        recgrp.getAds().setPayerbicbkacct(bizInfo.getOrcact());
        //收款人账号
        recgrp.getAds().setPayeebicbkacct(bizInfo.getPyeact());
        if (StringUtils.equals(bizInfo.getPaytyp(), "I")) {
            //收款行机构代码
            recgrp.getAds().setPayeebkorgcode(RmbbopUtils.getLhanum());
            //收款行机构名称
            recgrp.getAds().setPayeebkorgname(RmbbopUtils.getLhanam());
            //付款人代码
            recgrp.getAds().setPayerswiftbic("000000000");
            //收款人代码
            recgrp.getAds().setPayeeswiftbic(juscod);
            //付款人名称
            recgrp.getAds().setPayerswiftbicname(BopUtils.getPtsByRol("ORC").getNam());
            //收款人名称
            recgrp.getAds().setPayeeswiftbicname(nam1);
            //收款人账号
            recgrp.getAds().setPayeebicbkacct(othacc);
            //付款行机构代码
            String outswift = StringUtils.substring(BopUtils.getPtsByRol("SND").getExtkey(), 0, 11);
            recgrp.getAds().setPayerbkorgcode(outswift);
            //付款行机构名称
            recgrp.getAds().setPayerbkorgname(BopUtils.getPtsByRol("SND").getNam());
            //收款行国家（地区）代码
            recgrp.getAds().setPayeebkcountrycode("CHN");
            //付款人国家（地区）代码
            recgrp.getAds().setPayerbkcountrycode(bizInfo.getOrcctycod());
            //收款人国家（地区）代码
            String payeecountrycode = RmbbopUtils.getCountryCodeByRol("PYE");
            recgrp.getAds().setPayeecountrycode(StringUtils.isEmpty(payeecountrycode) ? "CHN" : payeecountrycode);
            //付款行国家（地区）代码
            String payerbkcountrycode = codetableService.getTblLabel(StringUtils.substring(outswift, 4, 6), "CTYCOD");
            recgrp.getAds().setPayerbkcountrycode(payerbkcountrycode);
        } else {
            String outSwiftRol = "";
            switch (bizInfo.getSwftyp()) {
                case "103":
                case "202":
                    outSwiftRol = "awi";
                    break;
                case "200":
                    outSwiftRol = "bei";
            }
            Pair<String, String> outSwift = RmbbopUtils.getOutSwift(outSwiftRol);
            //收款行机构代码
//            MappingField_RMB( GetField( "RECGRP\ADS\PAYEEBKORGCODE" ), Mid( $OUTSWIFT, 1, 11 ) )
            //收款行机构名称
            recgrp.getAds().setPayeebkorgname(outSwift.getRight());
            //付款行机构代码
            recgrp.getAds().setPayerbkorgcode(RmbbopUtils.getLhanum());
            //付款行机构名称
            recgrp.getAds().setPayerbkorgname(RmbbopUtils.getLhanam());
            //付款人代码
            recgrp.getAds().setPayerswiftbic(juscod);
            //收款人代码
            recgrp.getAds().setPayeeswiftbic("000000000");
            //付款人名称
            recgrp.getAds().setPayerswiftbicname(nam1);
            //收款人名称
            recgrp.getAds().setPayeeswiftbicname(BopUtils.getPtsByRol("PYE").getNam());
            //收款行国家（地区）代码
            recgrp.getAds().setPayeebkcountrycode(bizInfo.getPyectycod());
            //付款人国家（地区）代码
            String payercountrycode = RmbbopUtils.getCountryCodeByRol("ORC");
            recgrp.getAds().setPayercountrycode(StringUtils.isEmpty(payercountrycode) ? "CHN" : payercountrycode);
            //收款人国家（地区）代码
            recgrp.getAds().setPayeecountrycode(bizInfo.getPyectycod());
            //付款行国家（地区）代码
            recgrp.getAds().setPayerbkcountrycode("CHN");
        }
        //收付款日期
        recgrp.getAds().setPaymentdate(DateUtil.date());
        //收付款币种
        recgrp.getAds().setPaymentcurrencycode(RmbbopUtils.getCur());
        BigDecimal othamt = RmbbopUtils.getTxccy();
        //收付款金额
        recgrp.getAds().setPaymentamt(othamt);
    }
}
