using IRaCIS.Application.Contracts;

namespace IRaCIS.Application.Interfaces
{
    public interface IStatisticsService
    {
        Task<PageOutput<WorkloadByTrialAndReviewerDTO>> GetWorkloadByTrialAndReviewer(StatisticsWorkloadQueryParam param);

        PageOutput<EnrollStatByTrialDTO> GetEnrollStatByTrial(EnrollStatByTrialQueryDTO param);

        PageOutput<UserParticipateTrialStat> GetParticipateTrialStat(ParticipateQueryDto param);

        List<UserParticipateTrialDetail> GetParticipateTrialList(Guid userId);

        #region Dashboard 数据统计
        /// <summary> 按类型统计读片数量 </summary>
        ReadingDataDTO GetReadingDataByType();

        /// <summary> 按月份统计读片数量 </summary>
        List<ReadingDataMonthDTO> GetReadingDataByMonth(int monthCount);

        /// <summary> 读片数量排行 </summary>
        List<ReadingDataRankDTO> GetReadingDataRank(int topCount);

        /// <summary> 按Position统计 Reviewers 数量 </summary>
        List<RankReviewersDTO> GetReviewersByRank();

        ///<summary> 每月入组人次 </summary>
        List<EnrollQuartDataDTO> GetEnrollDataByQuarter(int quarterCount, int monthCount);

        ///<summary> 参与项目数排行 </summary>
        List<TrialDataRankDTO> GetTrialCountRank(int topCount);

        ///<summary> 最新工作量 （已确定的）</summary>
        List<LatestWorkLoadDTO> GetLatestWorkLoadList(int searchCount);
        #endregion

        Task<PageOutput<EnrollStatByReviewerDTO>> GetEnrollStatByReviewer(EnrollStatByReviewerQueryDTO enrollTrialStatisticsQueryParam);
    }
}
