package com.brilliance.isc.common.setmod.service;

import com.brilliance.isc.common.setfeg.vo.SetfelVo;
import com.brilliance.isc.common.setgll.vo.SetgllVo;
import com.brilliance.isc.common.setmod.vo.SetmodVo;
import com.brilliance.isc.common.trndoc.vo.DoceotVo;
import com.brilliance.isc.common.trnmod.vo.TrnmodVo;
import com.brilliance.isc.common.vo.SimpleModuleVo;
import com.brilliance.mda.runtime.mda.IStream;
import com.brilliance.mda.runtime.mda.impl.Argument;

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

public interface SetmodService {

    void assertSetmod(SetmodVo setmodVo);

    void internalPostFeeRegistersettlement(SetmodVo setmodVo);

    void internalPostSettleRegistersettlement(SetmodVo setmodVo);

    void assertSetfog(SetmodVo setmodVo, boolean onlyCalcFeeFlag);

    void assertSetfeg(SetmodVo setmodVo, boolean onlyCalcFeeFlag);

    void assertSetglg(SetmodVo setmodVo);

    int getPtyDetRow(String argrol, SetmodVo setmodVo);

    boolean checkXrtChg(SetmodVo setmodVo);

    void setTrnXreFields(SetmodVo setmodVo, TrnmodVo trnmod);

    void setAdditionalContract(String objtyp, String objinr, SetmodVo setmodVo);

    void setPtyGllPty(String argRol, String argRolGlg, String argEuqOnlFlg);

    String getGllRol(String argrol);

    void setglgAllValDat ( SetmodVo setmodVo, Date argValdat , String argFlag   );

    //获取币种的节假日，目前前端组件已实现,后端使用isHoliday方法
    @Deprecated
    String getCurCal(String inCur);

    /**
     * 判断指定日期是否是节假日
     *
     * @param cur
     * @param date
     * @return
     */
    boolean isHoliday(String cur, Date date);

    /**
     * 指定日期增加天数或者减少天数
     *
     * @param cur
     * @param beginDate
     * @param days
     * @param workday   是否避开节假日
     * @return
     */
    Date addDays(String cur, Date beginDate, int days, boolean workday);

    void fillPtyInrStm(IStream argStm);

    void setPtyActPtaInr(String argRol, String argActPtaInr);

    void getPtxInr(String rol, Argument<String> ptyinr, Argument<String> ptainr);

    String getDsp(String frame, BigDecimal amt, SetmodVo setmodVo);

    BigDecimal getRelAmount(String argRelTyp, String argRol, SetfelVo argSetFel, SetmodVo setmodVo);

    String getRelCur(SetfelVo argSetFel, SetmodVo setmodVo);

    void ptsChgAssert(SetmodVo setmodVo);

    void registerSettlementZZ(SetmodVo setmodVo);

    void setDspPolDft(SetmodVo setmodVo, String argDspFogDft, String argDspFegDft, String argDisableFlag);

    void setRolDspMdyFlg(SetmodVo setmodVo, String argRolDspMdyFlg);

    void setDocAmt(SetmodVo setmodVo, String argDocCur, BigDecimal argDocAmt, String argDisableFlag);

    void setOpnAmt(SetmodVo setmodVo, BigDecimal argOpnAmt);

    void setDftDspAct(SetmodVo setmodVo, String argRol, String argCur, String argDsp, String argAct);

    void setDftDsp(SetmodVo setmodVo, String argRol, String argCur, String argDsp);

    void setDftAcccur(SetmodVo setmodVo, String argRol, String argCur, String argGrpLst);

    String getNameOfRole(IStream roldsc, String role, String ptyinr);

    boolean isInternalDsp(String argDsp);

    void saveSetmod(SetmodVo setmodVo);

    void setmodSetRolCorFlg(String argrol, String argval, IStream parstm);

    void removeAllGITFEE(String feeName);

    void setAmeAmtFun(BigDecimal argAmeAmt, SetmodVo setmodVo);

    void setAmmAmtFun(SetmodVo setmodVo, BigDecimal argAmmAmt);

    void setConAmtFun(SetmodVo setmodVo, BigDecimal argConAmt);

    void setCliSetOptFun(SetmodVo setmodVo, String argCliSetOpt);

    @Deprecated
    default void setDspFlg(SetmodVo setmodVo, String argDspFlg, String argDisableFlag) {
    }

    void setForSetOptFun(SetmodVo setmodVo, String argForSetOpt);

    void setDftFeecur(String argRol, String argCur, SetmodVo setmodVo);

    void setPtyBasics(SetmodVo setmodVo, String argRol, String argPtyInr, String argPtaInr, String argNam);

    String setGlgAmt(SetmodVo setmodVo, String argId, String argRol, String argCur, BigDecimal argAmt, String argAmttyp);

    void printSettlement(Map<String, List<String[]>> dataMap, DoceotVo doceotVo, SetmodVo setmodVo);

    void setFepPntLev(SetmodVo setmodVo, int arglev);

    boolean checkIfAnyFeeSettled(List<SetfelVo> setfelVoList, String rol);

    boolean checkIfAnyFeeSettledDsp(List<SetfelVo> setfelVoList, String rol, String dsp);

    SetgllVo getSetgllVoByRol(List<SetgllVo> setgllVoList, String rol);

    void getZmqacc(SetmodVo setmodVo);

    void assertFale01(SetmodVo setmodVo);

    void saveFale01(SetmodVo setmodVo);

    void updateSetfelObjmod(List<SetfelVo> setfels, String feecod, SimpleModuleVo linkModule);

    BigDecimal getSettlementAmount(SetmodVo setmodVo, String argCur);
}
