package jnpf.cultivate.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.Page;
import jnpf.model.cultivate.po.position.FtbCultivatePosition;
import jnpf.model.cultivate.po.position.FtbCultivatePositionCourse;
import jnpf.model.cultivate.v2.course.vo.app.AppCourseSimpleVo;
import jnpf.model.cultivate.v2.position.req.V2OtherCultivatePositionCourseForAppReq;
import jnpf.model.cultivate.v2.position.vo.CultivatePositionSimpleVo;
import jnpf.model.cultivate.v2.position.vo.FtbCultivatePositionCourseWithNameVo;
import jnpf.model.cultivate.v2.position.vo.V2CultivatePositionDetailForApp;

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

public interface FtbCultivatePositionCourseService extends IService<FtbCultivatePositionCourse> {

    /**
     * 根据岗位学习ID列表统计课程数量
     *
     * @param positionLearnIds 岗位学习ID列表
     * @return 课程数量
     */
    Map<String, Long> countByPositionLearnIds(List<String> positionLearnIds);

    /**
     * 根据岗位学习ID查询所有有效课程
     *
     * @param postLearnId 岗位学习ID
     * @param courseId    课程ID
     * @return 课程列表
     */
    List<FtbCultivatePositionCourseWithNameVo> listByPostLearnId(String postLearnId, String courseId);

    /**
     * 根据岗位学习ID和职级ID查询所有有效课程
     *
     * @param postLearnId 岗位学习ID
     * @param gradeId     职级ID
     * @param courseId    课程ID
     * @return 课程列表
     */
    List<FtbCultivatePositionCourseWithNameVo> listByPostLearnIdAndGradeId(String postLearnId, String gradeId, String courseId);

    /**
     * 查询所有岗位学习
     *
     * @param courseName 课程名称
     * @return 岗位学习列表
     */
    List<CultivatePositionSimpleVo> queryAllPositionLearn(String courseName);

    /**
     * 查询所有岗位学习课程列表
     *
     * @param dto 请求参数
     * @return 岗位学习课程列表
     */
    List<AppCourseSimpleVo> queryAllPositionLearnCourseLists(V2OtherCultivatePositionCourseForAppReq dto);

    List<FtbCultivatePositionCourse> listByPostLearnIdAndExamId(String positionLearnId, String gradeId, String examId);

    List<FtbCultivatePositionCourse> listByPostLearnIdAndPracticeId(String positionLearnId, String gradeId, String practiceId);

    List<FtbCultivatePositionCourse> listByPostLearnIdAndIdentityId(String positionLearnId, String gradeId, String identityId);

    /**
     * 根据岗位学习ID、年级ID查询培训岗位课程列表
     *
     * @param positionLearnId 岗位学习ID
     * @param gradeId         职级iD
     * @return FtbCultivatePositionCourse对象列表
     */
    List<FtbCultivatePositionCourse> queryAllPositionCourseAndLearnIdAndGradeId(String positionLearnId, String gradeId);

    List<FtbCultivatePositionCourseWithNameVo> listPositionCourseList(FtbCultivatePosition existingPosition, V2CultivatePositionDetailForApp req);

    /**
     * 根据岗位学习ID查询所有课程
     *
     * @param positionLearnId 岗位学习ID
     * @param ompulsory       是否必修，0必修，1选修 null-所有
     * @return 课程列表
     */
    List<FtbCultivatePositionCourse> listAllCourseByPostLearnId(String positionLearnId,String postId, String gradeId, Integer ompulsory);

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

    /**
     * 根据岗位学习ID查询所有有效课程（包含课程名称）
     *
     * @param postLearnId 岗位学习ID
     * @param courseId    课程ID
     * @return 课程列表（包含课程名称）
     */
    List<FtbCultivatePositionCourseWithNameVo> listByPostLearnIdWithName(String postLearnId, String courseId);
}