package jnpf.cultivate.service.impl;

import com.baomidou.mybatisplus.extension.service.IService;
import jnpf.model.cultivate.po.position.FtbCultivatePosition;
import jnpf.model.cultivate.po.position.FtbCultivatePositionCourseExam;
import jnpf.model.cultivate.v2.position.req.V2OtherCultivatePositionCourseForAppReq;
import jnpf.model.cultivate.v2.position.vo.FtbCultivatePositionCourseExamWithNameVo;
import jnpf.model.cultivate.v2.position.vo.V2AllCultivatePositionCourseExam;

import java.util.List;
import java.util.Map;

public interface FtbCultivatePositionCourseExamService extends IService<FtbCultivatePositionCourseExam> {

    /**
     * 根据岗位学习ID列表统计考试数量
     */
    Map<String, Long> countByPositionLearnIds(List<String> positionLearnIds);

    /**
     * 根据岗位学习ID查询所有有效考试
     */
    List<FtbCultivatePositionCourseExam> listByPostLearnId(String postLearnId);

    /**
     * 根据岗位学习ID和课程ID列表查询所有有效考试
     */
    List<FtbCultivatePositionCourseExam> listByPostLearnIdAndCourseIds(String postLearnId, List<String> courseIds, String gradeId);

    List<FtbCultivatePositionCourseExam> queryAllPositionLearnExamLists(V2OtherCultivatePositionCourseForAppReq v2OtherCultivatePositionCourseForAppReq);

    List<String> queryPositionBindItem(FtbCultivatePosition cultivatePosition, String gradeId);

    List<V2AllCultivatePositionCourseExam> queryAllConfigExamId(List<String> postLearnIds, String courseId,String gradeID);

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

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

    /**
     * 检查考试是否被岗位学习绑定（关联岗位学习主表和课程表）
     *
     * @param examId 考试ID
     * @return true-已绑定 false-未绑定
     */
    Boolean checkExamBinding(String examId);
}