package com.red.circle.console.app.service.app.count.ops;

import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyCurrencyCountGroupCO;
import com.red.circle.console.app.dto.clienobject.count.ops.CountDailyGoldOriginGroupCO;
import com.red.circle.console.app.dto.clienobject.count.ops.CountUserRechargeRankGroupCO;
import com.red.circle.console.app.dto.clienobject.count.ops.CurrencyAnalyzeUserLogGroupCO;
import com.red.circle.console.app.dto.cmd.app.count.ops.GoldOriginProfileExportQry;
import com.red.circle.console.app.dto.cmd.app.count.ops.GoldOriginProfileQry;
import com.red.circle.wallet.inner.model.dto.WalletGoldCountDTO;
import java.time.LocalDate;
import java.util.List;

/**
 * 货币统计.
 *
 * @author pengliang on 2024/1/22
 */
public interface CountCurrencyService {

  /**
   * 各平台最近30天.
   *
   * @return ignore
   */
  List<CountDailyCurrencyCountGroupCO> listLast30Days();

  /**
   * 根据来源获取最近30记录.
   */
  List<CountDailyGoldOriginGroupCO> listLastGoldOrigin30Days(String origin);

  /**
   * 获取金币来源, 分布情况.
   */
  List<WalletGoldCountDTO> listGoldOriginProfile(GoldOriginProfileQry query);

  /**
   * 获取金币来源, 分布情况（每月）.
   */
  List<WalletGoldCountDTO> listGoldOriginProfileExport(GoldOriginProfileExportQry query);

  /**
   * 每日用户金币top榜.
   */
  List<CurrencyAnalyzeUserLogGroupCO> listDailyUserGoldTop(Integer dateNumber);

  /**
   * 每日用户充值top榜.
   */
  List<CountUserRechargeRankGroupCO> listDailyUserRechargeTop(Integer dateNumber);

  /**
   * 统计积分情况.
   */
  void countIntegral(Integer countTimeNumber, LocalDate countTime, LocalDate endCountTime);
}
