package jnpf.cultivate.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import jnpf.model.cultivate.dto.learn.BatchCommonCountDto;
import jnpf.model.cultivate.po.position.FtbCultivatePosition;
import jnpf.model.cultivate.po.position.FtbCultivatePositionCourseExam;
import jnpf.model.cultivate.v2.position.vo.FtbCultivatePositionCourseExamWithNameVo;
import jnpf.model.cultivate.v2.position.vo.V2AllCultivatePositionCourseExam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FtbCultivatePositionCourseExamMapper extends BaseMapper<FtbCultivatePositionCourseExam> {

    /**
     * 根据岗位学习 ID 列表统计考试数量
     */
    List<BatchCommonCountDto> countByPositionLearnIds(@Param("positionLearnIds") List<String> positionLearnIds);

    /**
     * 根据岗位学习 ID 查询考试（关联考试表，要求考试未删除且有效）
     */
    List<FtbCultivatePositionCourseExam> listByPostLearnIdWithExam(
            @Param("postLearnId") String postLearnId);

    /**
     * 根据岗位学习 ID 和课程 ID 列表查询考试（关联考试表，要求考试未删除且有效）
     */
    List<FtbCultivatePositionCourseExam> listByPostLearnIdAndCourseIdsWithExam(
            @Param("postLearnId") String postLearnId,
            @Param("courseIds") List<String> courseIds,
            @Param("gradeId") String gradeId);

    /**
     * 查询所有岗位学习考试（关联考试表，要求考试未删除且有效）
     */
    List<FtbCultivatePositionCourseExam> queryAllPositionLearnExamListsWithExam(
            @Param("req") Object req);

    List<String> queryPositionBindItem(@Param("position") FtbCultivatePosition position, @Param("gradeId") String gradeId);

    List<V2AllCultivatePositionCourseExam> queryAllConfigExamId(@Param("postLearnIds") List<String> postLearnIds, @Param("courseId") String courseId, @Param("gradeId") String gradeId);

    /**
     * 根据岗位学习ID查询所有有效考试（包含考试名称）
     *
     * @param postLearnId 岗位学习 ID
     * @return FtbCultivatePositionCourseExamWithNameVo 对象列表
     */
    List<FtbCultivatePositionCourseExamWithNameVo> listByPostLearnIdWithName(@Param("postLearnId") String postLearnId);

    /**
     * 根据岗位学习 ID 和课程 ID 列表查询考试（包含考试名称）
     *
     * @param postLearnId 岗位学习 ID
     * @param courseIds   课程 ID 列表
     * @return FtbCultivatePositionCourseExamWithNameVo 对象列表
     */
    List<FtbCultivatePositionCourseExamWithNameVo> listByPostLearnIdAndCourseIdsWithName(
            @Param("postLearnId") String postLearnId,
            @Param("courseIds") List<String> courseIds);

    /**
     * 检查考试是否被岗位学习绑定（关联岗位学习主表和课程表）
     *
     * @param examId 考试ID
     * @return 绑定数量（0或1）
     */
    Integer checkExamBinding(@Param("examId") String examId);
}