package jnpf.cultivate.v2.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.base.vo.PageListVO;
import jnpf.model.cultivate.CultivatePage;
import jnpf.model.cultivate.dto.position.FtbJobLearningPaginDTO;
import jnpf.model.cultivate.v2.course.vo.app.*;
import jnpf.model.cultivate.v2.course.web.req.V2NextUserCultivateCourseListReq;
import jnpf.model.cultivate.v2.position.req.FtbCultivatePositionSaveReq;
import jnpf.model.cultivate.v2.position.req.V2CultivateCoursePageReq;
import jnpf.model.cultivate.v2.position.req.V2CultivatePositionCourseForAppReq;
import jnpf.model.cultivate.v2.position.req.V2OtherCultivatePositionCourseForAppReq;
import jnpf.model.cultivate.v2.position.vo.*;

import java.util.List;

public interface V2CultivatePositionService {

    /**
     * 岗位学习管理-岗位学习分页列表
     *
     * @param req 请求参数对象，包含分页和查询条件
     * @return {@link PageListVO}<{@link WebPositionLearningListVo}>
     */
    Page<WebPositionLearningListVo> webPageList(FtbJobLearningPaginDTO req);

    /**
     * 添加岗位学习
     *
     * @param req 岗位学习实体
     * @return 操作结果
     */
    String add(FtbCultivatePositionSaveReq req);

    /**
     * 修改岗位学习
     *
     * @param req 岗位学习实体
     * @return 操作结果
     */
    String update(FtbCultivatePositionSaveReq req);

    /**
     * 删除岗位学习
     *
     * @param id 岗位学习ID
     * @return 操作结果
     */
    String delete(String id);

    /**
     * 获取岗位学习
     *
     * @param id 岗位学习ID
     * @return 岗位学习实体
     */
    WebCultivatePositionVo get(String id);

    /**
     * 获取岗位学习配置总览
     *
     * @param id 岗位学习ID
     * @return 岗位学习实体
     */
    WebCultivatePositionView webView(String id);

    /**
     * 获取当前岗位的学习课程列表。
     *
     * @param dto 请求参数对象，包含查询条件
     * @return 返回当前岗位的学习课程信息
     */
    PositionLearningCourseVo positionCourseLists(V2CultivatePositionCourseForAppReq dto);

    /**
     * 获取其他岗位的岗位列表。
     *
     * @param dto 请求参数对象，包含查询条件
     * @return 返回其他岗位的简要信息列表
     */
    List<CultivatePositionSimpleVo> otherPositionList(V2OtherCultivatePositionCourseForAppReq dto);

    /**
     * 获取其他岗位的课程数量统计信息。
     *
     * @param dto 请求参数对象，包含查询条件
     * @return 返回其他岗位的课程数量统计信息
     */
    OtherPositionCourseCountVo otherPositionCourseCount(V2OtherCultivatePositionCourseForAppReq dto);

    /**
     * 获取岗位学习的详细信息。
     *
     * @param dto 请求参数对象，包含查询条件
     * @return 返回岗位学习的详细信息
     */
    AppCultivatePositionDetailVo positionStudyDetail(V2CultivatePositionDetailForApp dto);

    /**
     * 分页查询岗位学习课程列表。
     *
     * @param req 请求参数对象，包含分页和查询条件
     * @return 返回分页后的岗位学习课程列表
     */
    Page<V2CultivateJobLearnCourseVo> positionCourseList(V2CultivateCoursePageReq req);

    /**
     * 检查指定岗位的学习记录是否存在。
     *
     * @param postId 岗位ID
     * @return 如果存在则返回true，否则返回false
     */
    Boolean checkExist(String postId);

    /**
     * 获取其他岗位的课程列表。
     *
     * @param dto  请求参数对象，包含查询条件
     * @param page 分页参数对象
     * @return 返回其他岗位的课程简要信息列表
     */
    List<AppCourseSimpleVo> otherPositionCourseList(V2OtherCultivatePositionCourseForAppReq dto, CultivatePage page);

    Page<AppCourseSimpleVo> allCompleteCourseLists(V2NextUserCultivateCourseListReq req);

    Page<AppCultivateCourseExamVo> allCompleteExamLists(V2NextUserCultivateCourseListReq req);

    Page<AppCultivateCourseIdentityVo> allCompleteIdentityLists(V2NextUserCultivateCourseListReq req);

    PageListVO<AppPracticeCountVo> allCompletePracticeLists(V2NextUserCultivateCourseListReq req);

    Page<AppCourseSimpleVo> selfPositionAllCompleteCourseLists(V2NextUserCultivateCourseListReq req);

    Page<AppCultivateCourseExamVo> selfPositionAllCompleteExamLists(V2NextUserCultivateCourseListReq req);

    Page<AppCultivateCourseIdentityVo> selfPositionAllCompleteIdentityLists(V2NextUserCultivateCourseListReq req);

    PageListVO<AppPracticeCountVo> selfPositionAllCompletePracticeLists(V2NextUserCultivateCourseListReq req);

    /**
     * 检查考试是否被岗位学习绑定
     *
     * @param examId 考试ID
     * @return true-已绑定 false-未绑定
     */
    Boolean checkExamBinding(String examId);
}
