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

import com.brilliance.isc.bo.Ptyrat;
import com.brilliance.isc.common.exception.CommonServiceException;
import com.brilliance.isc.common.setfeg.fee.Wrksum;
import com.brilliance.isc.common.setglg.vo.SetglgVo;
import com.brilliance.isc.common.setgll.vo.SetgllVo;
import com.brilliance.isc.common.setmod.vo.SetmodVo;
import com.brilliance.mda.runtime.mda.impl.Argument;

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

public interface SetglgService {

    boolean defaultSetgllN3000();

    void recalcSetglgBog(SetmodVo setmod) throws CommonServiceException;

    void setKeyAmtForRol(SetglgVo setglg, String argrol);

    void getSettlementRowsForRole(SetglgVo setglg, String rol, Argument<Integer> argSETFEG, Argument<Integer> argSETFOG, Argument<Integer> argTRN);

    void internalGllAdjust(SetglgVo setglg, Wrksum wrksum, SetmodVo setmod, BigDecimal argamt, String argcur, String srcmod, int srcidx);

    void internalGlgDistrib(SetglgVo setglg, SetmodVo setmod);

    BigDecimal getSettledAmount(SetglgVo setglg, String rol);

    BigDecimal getSetAmtSysByRolTypDsp(SetglgVo setglg, String rol, String flg, String dsp);

    int getSumtabRowForRole(SetglgVo setglg, String rol);

    void internalWrkSumCollect(SetglgVo setglg);

    Wrksum internalWrksumGetByKey(String argCur, String argRol, String argGllGrp, String argDsp, String argFcDinr, String argDspFlg, String argact);

    void internalWrksumSet(SetglgVo setglg, Wrksum wrksum);

/*
    void internalWrksumGetByIdx(SetglgVo setglg, int argIdx);
*/

    /**
     * argDspFlg
     * A - dsp灰显且账号灰显
     * J - dsp灰显且账号灰显 适用于结售汇
     * D - 融资三合一 且设置默认的账号
     * @param setglg
     * @param argId
     * @param argRol
     * @param argCur
     * @param argAmt
     * @param argAmttyp
     * @param argDsp
     * @param argDspFlg
     * @param argAct
     * @param argFcdInr
     * @return
     */
    String setglgAddAmount(SetglgVo setglg, String argId, String argRol, String argCur, BigDecimal argAmt, String argAmttyp, String argDsp, String argDspFlg, String argAct, String argFcdInr);

    void setglgClrAmount(SetglgVo setglg, String argId);

    void internalSetAmountCache(SetglgVo setglg, Wrksum wrksum, String argId, String argCacheKey);

    void setglgAddAmtFldAccCur(SetglgVo setglg, String argID, String argKey, String argAccCur);

    void setglgAddAmtFldAccCurAmt(SetglgVo setglg, String argID, String argKey, String argAccCur, BigDecimal argAccAmt);

    void setglgAddAmtFldValDat(SetglgVo setglg, String argId, String argKey, Date argValdat);

    void setglgAddAmtFldExtRat(SetglgVo setglg, String argId, String argKey, BigDecimal argScbExtRat, BigDecimal argDcbExtRat);

    void setglgAddAmtFldDisabled(SetglgVo setglg, String argId, String argKey, String... fields);

    void recalcSetglgEog(SetmodVo setmod) throws CommonServiceException;

/*WD 不再使用
    void setwrkGlp(SetglgVo setglg, int argGllidx, String sepInr);
*/

    void internalGetGlp(SetglgVo setglg, SetmodVo setmod);

/*
    void internalGlpCheck(SetglgVo setglg);
*/

    void internalSetValdat(SetglgVo setglg, int argLin, Date argValdat);

    String getGllGrpFlg(SetglgVo setglg, String argrol, String argid);

    void setDefaultGlgGrp(SetglgVo setglg, String argrol, String argId, String argGllGrp);

    int getNumberOfSettledRowsForRole(SetglgVo setglg, String rol);

    BigDecimal getFinAmtSys(SetglgVo setglg, String rol);

    boolean isexternaldsp(String dsp);

/*
    void registerdocuments(SetglgVo setglg);
*/

    String getCprAdd(SetglgVo setglg, SetgllVo setgllVo);

    void getRateXrtWithResRatesZZZ(Ptyrat ptyrat, String argCur, String basCur, boolean ininFlg, String typ, Date value, Argument<BigDecimal> rat, Argument<BigDecimal> sqrRat, Argument<BigDecimal> resRat, Argument<BigDecimal> rebRat);

    boolean checkXrtChg(SetglgVo setglg);

    void getRateXrtWithResRatesZZZ_ZMQ(Ptyrat ptyrat, String argCur, String basCur, boolean ininFlg, String typ, Date value, Argument<BigDecimal> rat, Argument<BigDecimal> sqrRat, Argument<BigDecimal> resRat, Argument<BigDecimal> rebRat);

    boolean checkXrtChg_zmq(SetglgVo setglg);

    boolean getFFAActFlg(SetglgVo setglg);

/*
    void registerAddTxt(SetglgVo setglg, Doceot argDoc);
*/

    void getSettledAmtCurForRol(SetglgVo setglg, String argRol, Argument<String> argCur, Argument<BigDecimal> argAmt);

    String calcMac(SetmodVo setmodVo);

    String calcMaceog(SetmodVo setmodVo);

    Set<String> getFixDspflagSet();
}
