package com.hzs.member.account.service;

import com.hzs.common.domain.member.account.CuMemberAccount;
import com.hzs.common.domain.system.config.BdAccount;
import com.hzs.common.domain.system.config.BdTradeWhiteConfig;
import com.hzs.system.base.dto.CurrencyDTO;

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

/**
 * 会员服务的公用调用三方服务
 *
 * @Description:
 * @Author: ljc
 * @Time: 2022/10/11 15:21
 * @Classname: ICuMemberBaseService
 * @Package_name: com.hzs.member.account.service
 */
public interface ICuMemberBaseService {

    /**
     * 根据国家ID获取汇率
     *
     * @param pkCountry 国家ID
     * @return CurrencyDTO 汇率信息
     */
    CurrencyDTO getCurrency(Integer pkCountry);

    /**
     * 根据汇率ID查询汇率
     *
     * @param currencyId ID
     * @return CurrencyDTO
     */
    CurrencyDTO getCurrencyById(Integer currencyId);


    /**
     * 根据ID查询 账户信息
     *
     * @param pkId 账户类型ID
     * @return BdAccount
     */
    BdAccount getAccount(Integer pkId);


    /**
     * 根据 模块类型、 国家ID查询账户类型
     *
     * @param accountType 账户类型
     * @param pkCountry   国家ID
     * @return List<BdAccount>
     */
    List<BdAccount> getAccountByCountry(Integer accountType, Integer pkCountry);


    /**
     * 根据国家ID查询账户类型
     *
     * @param pkCountry 国家ID
     * @return List<BdAccount>
     */
    List<BdAccount> getAccountByCountryId(Integer pkCountry);


    /**
     * 查询翻译的KEY值
     *
     * @param pkAccount 账户ID
     * @return Integer
     */
    Integer translateAccountValue(Integer pkAccount);


    /**
     * 根据币种ID查询币种对应的值
     *
     * @param pkAccount 账户ID
     * @return Integer
     */
    Integer getAccountValueById(Integer pkAccount);

    /**
     * 根据国家查询币种值集合
     *
     * @param pkCountry 国家ID
     * @return list
     */
    List<Integer> getAccountValuesByPkCountry(Integer pkCountry);


    /**
     * 金额为正时，只插入MemberTradeDetail
     *
     * @param sourceCode 来源单号
     */
    void saveMemberTradeDetail(String sourceCode);


    /**
     * 金额为负时，插入MemberTradeDetail  MemberTradeBonus
     *
     * @param memberAccountList 账户信息
     * @param sourceCode        来源单号
     * @param idsMap            业务ID
     * @param module            模块类型 来源于枚举
     */
    void handleMemberTradeDetailAndBonus(List<CuMemberAccount> memberAccountList, String sourceCode, Map<Long, Long> idsMap, Integer module);


    /**
     * 从数据库直译币种（导出用）
     *
     * @param pkAccount 币种翻译值
     * @return String
     */
    String getAccountTranslateFromDataBase(Integer pkAccount);

    /**
     * 查询是否配置白名单
     *
     * @param pkMember       会员ID
     * @param pkCountry      国家ID
     * @param businessModule 1:提现 2:转账 (来源枚举EBusinessModule)
     * @return BdTradeWhiteConfig
     */
    BdTradeWhiteConfig selectConfigWhite(Long pkMember, Integer pkCountry, Integer businessModule);

    /**
     * 获取指定时间周一的期数（date为null 取当前周的期数）
     *
     * @param date 时间参数
     * @return int
     */
    int getPeriod(String date);

    /**
     * 获取指定时间周一的期数（date为null 取当前周的期数）
     *
     * @param date 时间参数
     * @return int
     */
    int getPeriod(Date date, int num);

}
