package org.xyzh.api.study.record;

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

import java.math.BigDecimal;
import java.util.List;

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

    /**
     * @description 获取用户学习记录
     * @param userID 用户ID
     * @param resourceType 资源类型（可选）
     * @param resourceID 资源ID（可选）
     * @return ResultDomain<TbLearningRecord> 学习记录列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningRecord> getLearningRecord(TbLearningRecord learningRecord);

    /**
     * @description 获取资源学习记录
     * @param resourceType 资源类型
     * @param resourceID 资源ID
     * @return ResultDomain<TbLearningRecord> 学习记录列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningRecord> getResourceLearningRecords(TbLearningRecord learningRecord);

    /**
     * @description 创建或更新学习记录
     * @param learningRecord 学习记录
     * @return ResultDomain<TbLearningRecord> 创建/更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningRecord> insertLearningRecord(TbLearningRecord learningRecord);

    /**
     * @description 更新学习进度
     * @param learningRecord 学习记录
     * @return ResultDomain<TbLearningRecord> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningRecord> updateLearningRecord(TbLearningRecord learningRecord);

    /**
     * @description 标记学习完成
     * @param learningRecord 学习记录
     * @return ResultDomain<TbLearningRecord> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningRecord> markLearningComplete(TbLearningRecord learningRecord);

    /**
     * @description 获取用户学习统计
     * @param userID 用户ID
     * @param resourceType 资源类型（可选）
     * @return ResultDomain<TbLearningRecord> 学习统计
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningRecord> getUserLearningStatistics(String userID, Integer resourceType);

    /**
     * @description 获取用户学习进度
     * @param userID 用户ID
     * @param resourceType 资源类型
     * @param resourceID 资源ID
     * @return ResultDomain<TbLearningRecord> 学习进度
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningRecord> getUserLearningProgress(String userID, Integer resourceType, String resourceID);

    /**
     * @description 删除学习记录
     * @param recordID 记录ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteLearningRecord(String recordID);

    /**
     * @description 获取任务学习进度统计
     * @param taskID 任务ID
     * @return ResultDomain<TbLearningRecord> 学习进度统计
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbLearningRecord> getTaskLearningStatistics(String taskID);

    /**
     * @description 获取用户课程的学习记录
     * @param learningRecord 学习记录
     * @return ResultDomain<TbLearningRecord> 学习记录
     * @author yslg
     * @since 2025-10-24
     */
    ResultDomain<TbLearningRecord> getCourseLearningRecord(TbLearningRecord learningRecord);
}
