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

import com.red.circle.wallet.infra.database.mongo.entity.bank.UserBankRunningWater;
import com.red.circle.wallet.inner.model.cmd.UserBankRunningWaterQryCmd;
import java.util.List;

/**
 * 用户银行卡流水.
 *
 * @author pengliang on 2023/2/15
 */
public interface UserBankRunningWaterService {

  /**
   * 添加流水.
   */
  void add(UserBankRunningWater runningWater);

  /**
   * 批量插入流水.
   */
  void addBatch(List<UserBankRunningWater> runningWaters);

  /**
   * 获取指定流水跟踪id.
   */
  String getTrackIdById(Long id);

  /**
   * 用户最新流水记录.
   */
  List<UserBankRunningWater> listLast(Long userId, Integer size);

  /**
   * 用户流水记录.
   */
  List<UserBankRunningWater> pageRunningWater(UserBankRunningWaterQryCmd query);

  /**
   * 是否存在跟踪id.
   */
  boolean existsTrackId(String trackId);

  /**
   * 是否存在跟踪id.
   */
  boolean existsTrackId(Long userId, String event, String trackId);

  /**
   * 计算流水金额.
   */
  String calculateTotal(UserBankRunningWaterQryCmd query);

  /**
   * 月用户工资流水.
   *
   * @param userIds 用户ID列表
   * @param event 事件类型
   * @param month 月份，格式: yyyy-MM
   * @return 流水记录列表
   */
  List<UserBankRunningWater> getMonthSalaryRunningWater(List<Long> userIds, String event, String month);

}
