package org.xyzh.api.study.statistics;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.study.TbLearningStatistics;

import java.util.Date;
import java.util.List;

/**
 * @description 学习统计服务接口
 * @filename LearningStatisticsService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface LearningStatisticsService {

    /**
     * @description 获取用户学习统计
     * @param userID 用户ID
     * @param startDate 开始日期（可选）
     * @param endDate 结束日期（可选）
     * @return ResultDomain<TbLearningStatistics> 学习统计列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningStatistics> getUserLearningStatistics(String userID, Date startDate, Date endDate);

    /**
     * @description 获取指定日期的学习统计
     * @param userID 用户ID
     * @param statDate 统计日期
     * @return ResultDomain<TbLearningStatistics> 学习统计
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningStatistics> getDailyLearningStatistics(String userID, Date statDate);

    /**
     * @description 创建或更新学习统计
     * @param statistics 学习统计
     * @return ResultDomain<TbLearningStatistics> 创建/更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningStatistics> saveLearningStatistics(TbLearningStatistics statistics);

    /**
     * @description 更新学习统计
     * @param userID 用户ID
     * @param statDate 统计日期
     * @param totalDuration 总学习时长
     * @param resourceCount 学习资源数量
     * @param courseCount 学习课程数量
     * @param completeCount 完成数量
     * @return ResultDomain<TbLearningStatistics> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningStatistics> updateLearningStatistics(String userID, Date statDate, Integer totalDuration, Integer resourceCount, Integer courseCount, Integer completeCount);

    /**
     * @description 获取学习排行榜
     * @param statDate 统计日期
     * @param limit 限制数量
     * @return ResultDomain<TbLearningStatistics> 排行榜
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningStatistics> getLearningRanking(Date statDate, Integer limit);

    /**
     * @description 获取部门学习统计
     * @param deptID 部门ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return ResultDomain<TbLearningStatistics> 部门学习统计
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningStatistics> getDeptLearningStatistics(String deptID, Date startDate, Date endDate);

    /**
     * @description 获取总体学习统计
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return ResultDomain<TbLearningStatistics> 总体学习统计
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningStatistics> getOverallLearningStatistics(Date startDate, Date endDate);

    /**
     * @description 删除学习统计
     * @param statisticsID 统计ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteLearningStatistics(String statisticsID);
}
