package com.zanxiang.game.data.serve.service;

import com.zanxiang.game.data.serve.pojo.dto.*;
import com.zanxiang.game.data.serve.pojo.vo.*;
import com.zanxiang.game.data.serve.utils.Page;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

public interface IGameDataService {

    /**
     * 游戏每日数据
     * @param dto
     * @return
     */
    Page<GameDataDayVO> getGameDataDay(GameDataDayDTO dto);

    /**
     * 游戏每日数据总计
     * @param dto
     * @return
     */
    GameDataDayTotalVO getGameDataDayTotal(GameDataDayTotalDTO dto);

    /**
     * 游戏总数据
     * @param dto
     * @return
     */
    Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto);

    /**
     * 游戏总数据总计一栏
     * @param dto
     * @return
     */
    GameDataTotalTotalVO getGameDataTotalTotal(GameDataTotalTotalDTO dto);

    /**
     * 游戏流水数据
     * @param dto
     * @return
     */
    Page<GameDataWaterVO> getGameDataWater(GameDataWaterDTO dto);

    /**
     * 游戏每日复充数据
     * @param dto
     * @return
     */
    Map<LocalDate, List<GameDataAgainDayVO>> getGameDataAgainDay(GameDataAgainDayDTO dto) throws Exception;


    Page<GameDataH5VO> getH5Recharge(GameDataH5DTO dto);

    /**
     * ltv数据
     * @param dto
     * @return
     */
    Page<LtvDataVO> getLtvData(LtvDataDTO dto);

    /**
     * ltv数据总计一栏
     * @param dto
     * @return
     */
    LtvDataTotalVO getLtvTotalData(LtvDataTotalDTO dto);

    /**
     * 游戏首日复充
     * @param dto
     * @return
     */
    Page<GameDataFirstNewUserAgainVO> getFirstNewUserAgain(GameDataFirstNewUserAgainDTO dto);

    /**
     * 游戏首日复充总计
     * @param dto
     * @return
     */
    GameDataFirstNewUserAgainTotalVO getFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalDTO dto);

    /**
     * 用户详情
     * @param dto
     * @return
     */
    Page<GameDataUserDetailsVO> getUserDetails(GameDataUserDetailsDTO dto);

    /**
     * 流水监控
     * @param dto
     * @return
     */
    Page<FlowMonitorVO> getFlowMonitor(FlowMonitorDTO dto);

    /**
     * 流水监控总计
     * @param dto
     * @return
     */
    FlowMonitorCountVo getFlowMonitorCount(FlowMonitorDTO dto);
}
