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.course.FtbCultivateCourseDTO;
import jnpf.model.cultivate.dto.course.FtbCultivateCourseQueryDTO;
import jnpf.model.cultivate.dto.course.FtbCultivateCourseUpdateDTO;
import jnpf.model.cultivate.dto.course.FtbCultivateShelvesDTO;
import jnpf.model.cultivate.po.course.FtbCultivateCourse;
import jnpf.model.cultivate.vo.course.web.*;

import java.util.List;

public interface FtbCultivateCourseService extends IService<FtbCultivateCourse> {
    /**
     * 添加课程
     *
     * @param ftbCultivateCourseDTO 课程信息
     */
    String add(FtbCultivateCourseDTO ftbCultivateCourseDTO);

    FtbCultivateCourse realAdd(FtbCultivateCourseDTO ftbCultivateCourseDTO);

    /**
     * 课程上下架
     *
     * @param ftbCultivateShelvesDTO 课程上下架信息
     */
    void upperLower(FtbCultivateShelvesDTO ftbCultivateShelvesDTO);

    /**
     * 获取课程数量
     *
     * @return 课程数量
     */
    FtbCultivateCourseNumberVO listCount();

    /**
     * 获取课程详情
     *
     * @param id 课程ID
     * @return FtbCultivateCourse对象
     */
    FtbCultivateCourseDetailsVO courseDetails(String id);

    /**
     * 分页查询课程信息
     *
     * @param page                       分页对象
     * @param ftbCultivateCourseQueryDTO 课程查询条件
     * @return 分页课程信息
     */
    Page<FtbCultivateCoursePageVO> pagingQuery(Page<FtbCultivateCoursePageVO> page, FtbCultivateCourseQueryDTO ftbCultivateCourseQueryDTO);

    /**
     * 删除指定id的数据，并根据flag标记删除方式执行删除操作
     *
     * @param id 要删除的数据的id
     * @return 删除结果的动作返回值
     */
    void delete(String id);

    /**
     * 更新课程信息
     *
     * @param ftbCultivateCourseUpdateDTO 课程更新数据对象
     */
    void updateCourse(FtbCultivateCourseUpdateDTO ftbCultivateCourseUpdateDTO);

    void realUpdateCourse(FtbCultivateCourseUpdateDTO ftbCultivateCourseUpdateDTO);

    /**
     * 删除岗位学习列表
     *
     * @param page     分页列表
     * @param courseId 课程id
     * @return {@link Page}<{@link FtbCourseDeleteJobLearnVO}>
     */
    Page<FtbCourseDeleteJobLearnVO> deleteJobLearningList(Page<FtbCourseDeleteJobLearnVO> page, String courseId);

    /**
     * 删除相关题库列表
     *
     * @param page     分页列表
     * @param courseId 课程id
     * @return {@link Page}<{@link FtbCourseDeleteQuestionBankVO}>
     */
    Page<FtbCourseDeleteQuestionBankVO> deleteRelatedQuestionBankList(Page<FtbCourseDeleteQuestionBankVO> page, String courseId);


    /**
     * 根据用户ID获取推广渠道学习课程的列表
     *
     * @param userId 用户ID
     * @return 推广渠道学习课程列表
     */
    List<PromotionChannelLearnCourseVO> promotionPathwayCourses(String userId);

    /**
     * 课程删除检查判断
     *
     * @param id 课程id
     */
    ActionResult<FtbCourseDeleteVO> deleteCheck(String id);


    /**
     * 学习地图初始化
     *
     * @param userId     用户ID
     * @param positionId 岗位ID
     */
    void learnMapRelearn(String userId, String positionId);

    /**
     * 校验岗位是否建立岗位学习
     *
     * @param postIds 不存在的岗位id信息
     * @return 岗位信息
     */
    List<FtbCourseDeleteJobLearnVO.FtbCultivateJobBindingCoursesVO> queryJobBindingCourses(List<String> postIds);

}
