package com.brilliance.isc.swift.objmtconvert.model.mx.pacs00400109;

import com.brilliance.isc.swift.objmtconvert.ext.XmlDate;
import com.brilliance.isc.swift.objmtconvert.model.AbsMXCreator;
import com.brilliance.isc.swift.objmtconvert.model.mx.common.*;
import com.brilliance.isc.swift.objmtconvert.util.DateUtil;
import lombok.Data;

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

/**
 * @author zh
 * @create 2023-04-21-16:03
 */
@Data
public class MXPacs00400109Creator extends AbsMXCreator {

    public MXPacs00400109Creator(String identifier) {
        super(identifier);
    }

    /**
     * 消息标识号
     */
    private String msgId;

    /**
     * 消息创建时间
     */
    private String creDtTm;

    /**
     * 结算方法
     */
    private String sttlmMtd;

    /**
     * 结算账户信息
     */
    private Account sttlmAcct;

    /**
     * 退款标识号
     */
    private String rtrId;

    /**
     * 原始消息组信息
     */
    private OrgnlGrpInf orgnlGrpInf;

    /**
     * 原始消息标识号
     */
    private String orgnlInstrId;

    /**
     * 原始端到端标识号
     */
    private String orgnlEndToEndId;

    /**
     * 原始端到端业务唯一参考号
     */
    private String orgnlUETR;

    /**
     * 原始清算系统参考号
     */
    private String orgnlClrSysRef;

    /**
     * 原始结算金额
     */
    private Amt orgnlIntrBkSttlmAmt;

    /**
     * 原始结算日期
     */
    private String orgnlIntrBkSttlmDt;

    /**
     * 退款金额
     */
    private Amt rtrdIntrBkSttlmAmt;

    /**
     * 结算日期
     */
    private String intrBkSttlmDt;

    /**
     * 结算时间信息
     */
    private SttlmTmIndctn sttlmTmIndctn;

    /**
     * 退款原始金额
     */
    private Amt rtrdInstdAmt;

    /**
     * 原始金额币种和实际结算金额币种的汇率
     */
    private BigDecimal exchgRate;

    /**
     * 手续费承担方
     */
    private String chrgBr;

    /**
     * 手续费信息
     */
    private List<ChrgsInf> chrgsInf;

    /**
     * 汇款方
     */
    private Dbtr dbtr;

    /**
     * 汇款行
     */
    private Agent dbtrAgt;

    /**
     * 之前的发报行1
     */
    private Agent prvsInstgAgt1;

    /**
     * 之前的发报行2
     */
    private Agent prvsInstgAgt2;

    /**
     * 之前的发报行3
     */
    private Agent prvsInstgAgt3;

    /**
     * 中间行1
     */
    private Agent intrmyAgt1;

    /**
     * 中间行2
     */
    private Agent intrmyAgt2;

    /**
     * 中间行3
     */
    private Agent intrmyAgt3;

    /**
     * 收款行
     */
    private Agent cdtrAgt;

    /**
     * 收款人
     */
    private Cdtr cdtr;

    /**
     * 退款方
     */
    private Party orgtr;

    /**
     * 退款原因代码
     */
    private String rsnCd;

    /**
     * 退款附加信息
     */
    private List<String> addtlInf;

    /**
     * 交易所依据的服务
     */
    private List<SvcLvl> svcLvl;

    /**
     * 包含交易的数量，默认是1
     */
    private String nbOfTxs;

    public void setCreDtTm(XmlDate creDtTm) {
        this.creDtTm = creDtTm.getDateStr();
    }

    public void setOrgnlIntrBkSttlmDt(Date orgnlIntrBkSttlmDt) {
        this.orgnlIntrBkSttlmDt = DateUtil.format(orgnlIntrBkSttlmDt,"yyyy-MM-dd");
    }

    public void setIntrBkSttlmDt(Date intrBkSttlmDt) {
        this.intrBkSttlmDt = DateUtil.format(intrBkSttlmDt,"yyyy-MM-dd");
    }
}
