package com.brilliance.isc.doc.service.impl;

import com.brilliance.mda.runtime.mda.util.Formats;
import com.brilliance.mda.runtime.mda.util.MdaUtils;
import com.brilliance.isc.bo.Txflog;
import com.brilliance.isc.bo.Txform;
import com.brilliance.isc.bo.Txpreg;
import com.brilliance.isc.bo.Usr;
import com.brilliance.isc.common.doc.TextResultVo;
import com.brilliance.isc.common.trndoc.vo.DoceotVo;
import com.brilliance.isc.common.txfmod.service.TxfmodPdfService;
import com.brilliance.isc.common.txfmod.vo.TxfmodVo;
import com.brilliance.isc.doc.handle.impl.common.SimpleTextProvider;
import com.brilliance.isc.mda.dao.TxflogMapper;
import com.brilliance.isc.mda.dao.UsrMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class TxfmodPdfServiceImpl implements TxfmodPdfService {

    @Resource
    private TxflogMapper txflogMapper;
    @Resource
    private UsrMapper usrMapper;

    @Override
    public TextResultVo viewPdf(TxfmodVo txfmodVo) {
        SimpleTextProvider.SimpleTextProviderBuilder simpleTextProviderBuilder = SimpleTextProvider.builder();
        simpleTextProviderBuilder.templateName("COMMON_TXFPDFL1_LET.html");
        simpleTextProviderBuilder.docName("TXFPDFL1_LET");
        simpleTextProviderBuilder.enableCortypes(null);
        simpleTextProviderBuilder.onlyHtml(false);
        SimpleTextProvider simpleTextProvider = simpleTextProviderBuilder.build();
        Map<String, Object> extraMap = buildTxfpdfl1(txfmodVo);
        DoceotVo doceotVo = new DoceotVo();
        doceotVo.setDocuil("CN");
        doceotVo.setPandsc("服务贸易等项目对外付汇税务备案表");
        TextResultVo textResultVo = simpleTextProvider.outputMessage(txfmodVo, doceotVo, extraMap);
        return textResultVo;
    }

    public Map<String, Object> buildTxfpdfl1(TxfmodVo txfmodVo){
        Map<String, Object> map = new HashMap();
        Txform txform = txfmodVo.getTxform();
        // 备案表编号
        String rcrdno = txform.getRcrdno();
        map.put("rcrdno",rcrdno);
        // 备案表日期
        String rcrddt = Formats.format(txform.getRcrddt(), "YYYY-MM-DD");
        map.put("rcrddt",rcrddt);
        // 机构名称或个人姓名
        String payernm = txform.getPayernm();
        map.put("payernm",payernm);
        // 纳税人识别号
        String taxpyidnfno = txform.getTaxpyidnfno();
        map.put("taxpyidnfno",taxpyidnfno);
        // 地址或住所
        String payeradr = txform.getPayeradr();
        map.put("payeradr",payeradr);
        // 付汇银行
        String pymtbnknm = txform.getPymtbnknm();
        map.put("pymtbnknm",pymtbnknm);
        // 付汇账号
        String pymtacctno = txform.getPymtacctno();
        map.put("pymtacctno",pymtacctno);
        // 联系人
        String ctcprsnnm = txform.getCtcprsnnm();
        map.put("ctcprsnnm",ctcprsnnm);
        // 联系电话
        String ctctelno = txform.getCtctelno();
        map.put("ctctelno",ctctelno);
        // 主管税务机关
        String satraptxtnofcnm = txform.getSatraptxtnofcnm();
        map.put("satraptxtnofcnm",satraptxtnofcnm);
        // 主管税务机关代码
        String satraptxtnofccd = txform.getSatraptxtnofccd();
        map.put("satraptxtnofccd",satraptxtnofccd);
        // 名称
        String payeenm = txform.getPayeenm();
        map.put("payeenm",payeenm);
        // 所属国家或地区
        String payeectrynm = txform.getPayeectrynm();
        map.put("payeectrynm",payeectrynm);
        // 地址
        String payeeadr = txform.getPayeeadr();
        map.put("payeeadr",payeeadr);
        // 收汇银行
        String clctnbnknm = txform.getClctnbnknm();
        map.put("clctnbnknm",clctnbnknm);
        // 收汇账号
        String clctnacctno = txform.getClctnacctno();
        map.put("clctnacctno",clctnacctno);
        // 合同名称
        String ctrnm = txform.getCtrnm();
        map.put("ctrnm",ctrnm);
        // 合同号
        String ctrno = txform.getCtrno();
        map.put("ctrno",ctrno);
        // 合同总金额（或支付标准）
        String ctramt = txform.getCtramt();
        map.put("ctramt",ctramt);
        // 币种
        String ccy = txform.getCcy();
        map.put("ccy",ccy);
        // 合同签订日期
        String sgntrdt = Formats.format(txform.getSgntrdt(), "YYYY-MM-DD");
        map.put("sgntrdt",sgntrdt);
        // 合同执行期限
        String bgndt = Formats.format(txform.getBgndt(), "YYYY-MM-DD");
        String enddt = Formats.format(txform.getEnddt(), "YYYY-MM-DD");
        String htzxdt = bgndt + " 至 " + enddt;
        map.put("htzxdt",htzxdt);
        String payflg = txfmodVo.getPayflg();
        // 付汇登记信息
        String fhdjxx = "";
        if(MdaUtils.compareTo(payflg,"Y") == 0){
            fhdjxx = "√无国际收支申报号付汇（若勾选此选项，则无需录入国际收支申报号，国际收支交易编码根据实际情况填写，可不选择）";
        } else {
            fhdjxx = "□无国际收支申报号付汇（若勾选此选项，则无需录入国际收支申报号，国际收支交易编码根据实际情况填写，可不选择）";
        }
        map.put("fhdjxx",fhdjxx);
        List<Txpreg> reglst = txfmodVo.getReglst();
        ArrayList<HashMap<String,Object>> list = new ArrayList<>();
        if (reglst.size() > 0) {
            for (Txpreg txpreg : reglst) {
                HashMap<String, Object> item = new HashMap<>();
                item.put("itnlincmpaydclrtnno",txpreg.getItnlincmpaydclrtnno());
                item.put("txncd",txpreg.getTxncd());
                item.put("txnccy",txpreg.getTxnccy());
                item.put("pymtamt",txpreg.getPymtamt());
                item.put("rmk",txpreg.getRmk());
                list.add(item);
            }
        } else {
            HashMap<String, Object> item = new HashMap<>();
            item.put("itnlincmpaydclrtnno","");
            item.put("txncd","");
            item.put("txnccy","");
            item.put("pymtamt","");
            item.put("rmk","");
            list.add(item);
        }
        map.put("list",list);
        Txflog reqTxflog = new Txflog();
        reqTxflog.setBsnsrlno(txfmodVo.getTxpaym().getBsnsrlno());
        Txflog acctxflog = txflogMapper.selectByBsnsrlno(reqTxflog);
        // 经办
        String accnam = "";
        if (acctxflog != null) {
            Usr accusr = usrMapper.getUsrByExtkey(acctxflog.getUpdusr());
            if (accusr != null) {
                accnam = accusr.getNam();
            }
        }
        map.put("accnam",accnam);

        // 复核
        String relnam = "";
        Txflog reltxflog = txflogMapper.selectByBsnsrlno(reqTxflog);
        if (reltxflog != null) {
            Usr relusr = usrMapper.getUsrByExtkey(reltxflog.getUpdusr());
            if (relusr != null) {
                relnam = relusr.getNam();
            }
        }
        map.put("relnam",relnam);
        return map;
    }
}
