package jnpf.cultivate.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import jnpf.base.ActionResult;
import jnpf.model.cultivate.dto.position.*;
import jnpf.model.cultivate.dto.position.web.FtbCultivatePositionJobLearnCourseCertificateDTO;
import jnpf.model.cultivate.dto.position.web.FtbCultivatePositionJobLearnCourseStateSwitchDTO;
import jnpf.model.cultivate.dto.position.web.FtbJobLearnCourseRetakeCertificateDTO;
import jnpf.model.cultivate.po.position.FtbCultivatePosition;
import jnpf.model.cultivate.vo.position.*;

import java.util.List;

public interface FtbCultivatePositionService extends IService<FtbCultivatePosition> {
    /**
     * 添加岗位学习
     *
     * @param ftbCultivatePositionJobLearnDTO 岗位学习参数
     * @return 岗位学习主键id
     */
    String addJobLearning(FtbCultivatePositionJobLearnDTO ftbCultivatePositionJobLearnDTO);

    /**
     * 岗位学习上下架
     * @param ftbCultivateShelvesDTO 岗位学习上下架参数
     */
    void upperLower(FtbCultivatePositionShelvesDTO ftbCultivateShelvesDTO);

    /**
     * 添加岗位学习考试
     * @param ftbCultivatePositionJobLearnExamDTO 考试参数
     */
    void addJobLearningExam(FtbCultivatePositionJobLearnExamDTO ftbCultivatePositionJobLearnExamDTO);

    /**
     * 添加岗位学习实操鉴定
     * @param ftbCultivatePositionLearnPracticalDTO 实操鉴定参数
     */
    void addPostLearningPracticalAppraisal(FtbCultivatePositionLearnPracticalDTO ftbCultivatePositionLearnPracticalDTO);

    /**
     * 添加岗位学习课程
     * @param ftbCultivatePositionLearnPracticalDTO 岗位学习课程参数
     */
    void addJobLearningCourses(FtbCultivatePositionLearingCourselDTO ftbCultivatePositionLearnPracticalDTO);

    /**
     * 添加岗位学习课程时，课程列表
     * @param ftbCultivatePositionCoursePageDTO 课程列表搜索参数
     * @return 课程列表
     */
    List<FtbCultivatePositionJobLearnCourseVO> jobLearningCourseList(FtbCultivatePositionCoursePageDTO ftbCultivatePositionCoursePageDTO);

    /**
     * 岗位学习添加课程考试
     * @param ftbStudyCourseExamAddDTO 课程考试参数
     */
    void studyCourseExamAdded(FtbStudyCourseExamAddDTO ftbStudyCourseExamAddDTO);

    /**
     * 岗位学习中添加课程鉴定
     * @param ftbStudyCourseIdentityAddDTO 课程鉴定参数
     */
    void studyCourseIdentityAdded(FtbStudyCourseIdentityAddDTO ftbStudyCourseIdentityAddDTO);

    /**
     * 岗位学习中课程列表-课程考试删除
     * @param courseExamId 考试id
     */
    void courseExamDeletion(String courseExamId);

    /**
     * 岗位学习中课程列表-课程鉴定删除
     * @param courseIdentityId 鉴定id
     */
    void courseIdentityDeletion(String courseIdentityId);

    /**
     * 岗位学习课程列表-重选鉴定
     * @param ftbReselectionAppraisalDTO 重选鉴定参数
     */
    void reselectionAppraisal(FtbReselectionAppraisalDTO ftbReselectionAppraisalDTO);

    /**
     * 岗位学习课程列表-重选考试
     * @param ftbRetakeExamDTO 重选考试参数
     */
    void retakeExam(FtbRetakeExamDTO ftbRetakeExamDTO);

    /**
     * 岗位学习中课程列表-删除岗位学习课程
     * @param id 岗位学习课程主键id
     */
    void deletionOfOnTheJobLearningCourses(String id);

    /**
     * 岗位学习中课程列表页
     * @return 课程列表
     */
    Page<FtbCultivatePositionLearnLevelVO> jobLevelCourseList(Page<FtbCultivatePositionLearnLevelVO> page, FtbCultivatePositionCourseLevelPageDTO ftbCultivatePositionCourseLevelPageDTO);

    /**
     * 岗位学习课程列表下拉选项
     */
    FtbPositionCourseDropDownListVO courseDropDownList(FtbCourseDropDownListDTO ftbCourseDropDownListDTO);

    /**
     * 岗位学习管理-岗位学习分页列表
     * @param page 分页参数
     * @param ftbJobLearningPaginDTO 搜索参数
     * @return 岗位学习分页列表
     */
    Page<FtbJobLearningPaginatedVO> jobLearningPaginatedList(Page<FtbJobLearningPaginatedVO> page, FtbJobLearningPaginDTO ftbJobLearningPaginDTO);

    /**
     * 岗位学习管理-删除岗位学习
     * @param postLearnId 岗位学习主键id
     */
    ActionResult deletionOfJobLearning(String postLearnId);

    /**
     * 岗位学习配置总览
     * @param postLearnId 岗位学习主键ID
     * @param postId 岗位主键ID
     */
    FtbJobLearningConfigurationVO overviewOfJobLearningConfiguration(String postLearnId, String postId);

    /**
     * 岗位学习，获取实操鉴定和考试及证书
     * @param postLearnId 岗位学习ID
     * @param postIdID 岗位ID
     * @return
     */
    FtbJobLearningExamAppraisalVO jobLearningExamAppraisal(String postLearnId, String postIdID);

    /**
     * 岗位学习-考试删除
     * @param postLearnId 岗位学习主键ID
     * @param postRankId 岗位ID
     */
    void postStudyExamDeleted(String postLearnId, String postRankId);

    /**
     * 岗位学习-实操鉴定删除
     * @param postLearnId 岗位学习主键ID
     * @param postRankId 岗位ID
     */
    void jobLearningPracticalAppraisalDelete(String postLearnId, String postRankId);

    /**
     * 成员管理模块-删除该员工绑定职等对应的岗位学习
     * @param id 岗位id
     * @param userId 用户id
     */
    void deleteMemberGrade(String id, String userId);

    /**
     * 岗位学习-证书删除
     * @param postLearnId 岗位学习主键ID
     * @param postRankId 岗位ID
     */
    void certificateDeletion(String postLearnId, String postRankId);

    /**
     * 添加岗位学习证书
     * @param certificateDTO 岗位学习证书参数
     */
    void onTheJobLearningCertificate(FtbCultivatePositionJobLearnCertificateDTO certificateDTO);

    /**
     * 添加岗位学习课程证书
     * @param certificateDTO 课程证书参数
     */
    void addJobLearningCourseCertificate(FtbCultivatePositionJobLearnCourseCertificateDTO certificateDTO);

    /**
     * 岗位学习-课程证书删除
     * @param postLearnId 岗位学习主键ID
     * @param courseId 课程ID
     */
    void certificateCourseDeletion(String postLearnId, String courseId);

    /**
     * 更改课程选修和必修切换
     * @param stateSwitchDTO 课程选修和必修切换参数
     */
    void changeCourseElectiveAndRequiredSwitching(FtbCultivatePositionJobLearnCourseStateSwitchDTO stateSwitchDTO);

    /**
     * 重选课程证书
     * @param certificateDTO 重选课程证书参数
     */
    void courseRetakeCertificate(FtbJobLearnCourseRetakeCertificateDTO certificateDTO);
}
