package com.red.circle.wallet.infra.database.mongo.service.bank;

import com.red.circle.tool.core.tuple.PennyAmount;
import com.red.circle.wallet.infra.database.mongo.entity.bank.UserBankBalance;
import com.red.circle.wallet.inner.model.cmd.UserBankBalanceQryCmd;
import com.red.circle.wallet.inner.model.dto.BankBalanceDTO;
import com.red.circle.wallet.inner.model.dto.UserBankBalanceDTO;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 用户银行卡余额.
 *
 * @author pengliang on 2023/2/15
 */
public interface UserBankBalanceService {

  /**
   * 是否存在账户.
   *
   * @return true 存在.
   */
  boolean existsPrimary(Long userId);

  /**
   * 累计余额.
   *
   * @param userId    用户id
   * @param sysOrigin 平台
   * @param amount    金额
   * @return 是否操作成功
   */
  boolean incr(Long userId, String sysOrigin, PennyAmount amount);

  /**
   * 类型消费累计.
   *
   * @param userId 用户id
   * @param amount 金额
   * @return 是否操作成功
   */
  BankBalanceDTO decr(Long userId, PennyAmount amount);

  /**
   * 获取余额.
   */
  BankBalanceDTO getBalance(Long userId);

  /**
   * 获取一组用户护额信息.
   */
  Map<Long, BankBalanceDTO> mapBalance(Collection<Long> userIds);

  /**
   * 查看用户银行卡账户.
   */
  List<UserBankBalanceDTO> listBalance(UserBankBalanceQryCmd query);

  List<UserBankBalance> listAll();

}
