package com.qmth.distributed.print.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.distributed.print.business.bean.params.ObeCourseOutlineParam;
import com.qmth.distributed.print.business.bean.result.CourseWeightSettingStatusResult;
import com.qmth.distributed.print.business.bean.result.DictionaryResult;
import com.qmth.distributed.print.business.bean.result.ObeCourseBasicInfoResult;
import com.qmth.distributed.print.business.bean.result.ObeCourseOutlineResult;
import com.qmth.distributed.print.business.entity.ObeCourseOutline;
import com.qmth.distributed.print.business.enums.CourseSettingTypeEnum;

import java.util.List;

/**
 * <p>
 * 课程大纲表 服务类
 * </p>
 *
 * @author CaoZixuan
 * @since 2024-06-05
 */
public interface ObeCourseOutlineService extends IService<ObeCourseOutline> {

    /**
     * 课程大纲分页查询
     *
     * @param professionalId    专业id
     * @param cultureProgramId  培养方式id
     * @param courseId          课程id
     * @param courseOutlineName 课程大纲名称
     * @param pageNumber        分页页码
     * @param pageSize          分页容量
     * @return 分页数据
     */
    IPage<ObeCourseOutlineResult> findObeCourseOutlinePage(Long professionalId, Long cultureProgramId, Long courseId,
            String courseOutlineName, int pageNumber, int pageSize);

    /**
     * 课程大纲保存
     *
     * @param obeCourseOutlineParams 课程大纲
     */
    void saveObeCourseOutline(ObeCourseOutlineParam obeCourseOutlineParams);

    /**
     * 课程大纲删除
     *
     * @param id 课程大纲id
     */
    void removeObeCourseOutline(Long id);

    /**
     * 删除考核设置 （自定义评价方式和权重）
     *
     * @param id 课程大纲id
     */
    void removeAssessmentSetting(Long id);

    /**
     * 清除课程目标、评价、权重设置
     *
     * @param obeCourseOutlineId    课程大纲id
     * @param courseSettingTypeEnum 课程设置类型
     */
    void clearCourseSetting(Long obeCourseOutlineId, CourseSettingTypeEnum courseSettingTypeEnum);

    /**
     * 查询课程权重设置状态
     *
     * @param obeCourseOutlineId 课程大纲id
     * @return 课程权重设置状态
     */
    CourseWeightSettingStatusResult findCourseWeightSettingStatus(Long obeCourseOutlineId);

    /**
     * 查询课程基本信息
     *
     * @param obeCourseOutlineId 课程大纲id
     * @return 课程基本信息
     */
    ObeCourseBasicInfoResult findCourseBasicInfo(Long obeCourseOutlineId);

    /**
     * 查询可选择的培养方案
     *
     * @return 培养方案
     */
    List<DictionaryResult> findCanChooseCultureProgram();

    /**
     * 查询可选择的课程
     *
     * @param cultureProgramId 培养方案id
     * @return 课程
     */
    List<DictionaryResult> findCanChooseCourse(Long cultureProgramId);
}