package jnpf.cultivate.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.model.cultivate.dto.learn.BatchCommonCountDto;
import jnpf.model.cultivate.dto.position.app.FtbCultivatePositionForAppNewDTO;
import jnpf.model.cultivate.po.course.FtbCultivateCourse;
import jnpf.model.cultivate.po.position.FtbCultivatePositionCourceLearning;
import jnpf.model.cultivate.v2.course.vo.UserLearningStatusVo;
import jnpf.model.cultivate.vo.course.app.FtbGlobalCurriculumAppVO;
import jnpf.model.cultivate.vo.position.app.FtbSubordinateLearningCoursesVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FtbCultivatePositionCourceLearningMapper extends BaseMapper<FtbCultivatePositionCourceLearning> {

    /**
     * 岗位学习课程列表
     *
     * @param userId 用户 ID
     * @param postId 岗位 ID
     * @param type   查询类型,0全局课程，1本岗位课程
     * @return {@link Page}<{@link FtbGlobalCurriculumAppVO}>
     */
    Page<FtbGlobalCurriculumAppVO> globalCurriculumList(@Param("page") Page page, @Param("userId") String userId,
                                                        @Param("postId") String postId,
                                                        @Param("gradeId") String gradeId, @Param("type") Integer type);

    /**
     * 是否为线下培训课程
     */
    Integer whetherToAddOfflineTrainingCourses(@Param("userId") String userId, @Param("courseId") String courseId);

    /**
     * 岗位学习-下属实操鉴定
     */
    Page<String> practicalAppraisalList(@Param("page") Page<String> voPage, @Param("userId") String userId, @Param("gradeIds") List<String> gradeIds);

    /**
     * 本岗课程内容
     */
    List<FtbGlobalCurriculumAppVO> onTheJobLearningCourse(@Param("params") FtbCultivatePositionForAppNewDTO dto);

    /**
     * 查看课程培训数据
     */
    Page<FtbSubordinateLearningCoursesVO> subordinateLearningCourses(@Param("page") Page<FtbSubordinateLearningCoursesVO> result, @Param("params") FtbCultivatePositionForAppNewDTO dto);

    /**
     * 下属学习课程
     */
    Page<FtbSubordinateLearningCoursesVO> subordinateLearningCoursess(@Param("page") Page<FtbSubordinateLearningCoursesVO> result, @Param("params") FtbCultivatePositionForAppNewDTO dto
            , @Param("postIds") List<String> postIds);

    /**
     * 批量查询用户完成的学习课程
     * @param userIds 用户ID
     * @return
     */
    List<FtbCultivatePositionCourceLearning> listCompleteCourseForUserIds(@Param("userIds") List<String> userIds);

    /**
     * 计算学习时长
     * @param courseIds 课程ID
     * @param userId 用户ID
     */
    Long queryStudyTime(@Param("courseIds") List<String> courseIds, @Param("userId") String userId);

    /**
     * 批量查询课程完成情况
     * @param courseIds 课程ID
     * @return
     */
    List<BatchCommonCountDto> countForCourseIds(@Param("courseIds") List<String> courseIds);

    List<FtbCultivateCourse> queryUserUnreadMsgV2(@Param("userId") String userId, @Param("courseId") String courseId);

    /**
     * 根据课程ID列表和用户ID统计已完成的学习课程数量
     *
     * @param courseIds 课程ID列表
     * @param userId    用户ID
     * @return 已完成课程数量
     */
    Long countCompletedCoursesByUserAndCourseIds(@Param("courseIds") List<String> courseIds,
                                                  @Param("userId") String userId);

    /**
     * 列表课程统计
     */
    List<FtbCultivatePositionCourceLearning> accessCourseStatistics(@Param("userIds") List<String> userIds);

    /**
     * 查询用户已完成的课程列表（关联查询课程信息）
     * @param userId 用户ID
     * @return 已完成课程列表
     */
    List<UserLearningStatusVo.CourseInfo> queryCompletedCoursesWithInfo(@Param("userId") String userId);
}