package com.qmth.teachcloud.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
import com.qmth.teachcloud.common.entity.BasicCourse;
import com.qmth.teachcloud.common.entity.SysUser;
import org.springframework.util.LinkedMultiValueMap;

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

/**
 * <p>
 * 课程表 服务类
 * </p>
 *
 * @author xf
 * @since 2021-03-23
 */
public interface BasicCourseService extends IService<BasicCourse> {

    List<BasicCourse> listCoursesByUserId(Long userId);

    /**
     * 校验课程信息
     *
     * @param schoolId   学校id
     * @param courseCode 课程代码
     * @param courseName 课程名称
     * @param userId     当前用户id
     */
    void verifyCourseInfo(Long schoolId, String courseCode, String courseName, Long userId);

    /**
     * 根据用户登录名和真实名称查找其可命的课程
     *
     * @param loginName 登录名
     * @param realName  真实名
     * @return 课程集合
     */
    List<CourseInfoDto> findByUserLoginNameAndRealName(String loginName, String realName);

    BasicCourse findByCourseCode(String courseCode);

    BasicCourse findByCourseCode(String courseCode,Long schoolId);

    /**
     * 创建课程
     *
     * @param schoolId   学校id
     * @param courseCode 课程编号
     * @param courseName 课程名称
     */
    void createCourse(Long schoolId, String courseCode, String courseName);

    // dev_2.2.0

    /**
     * 查询课程信息-分页查询
     *
     * @param belongOrgId     所属机构id
     * @param courseName      课程名称（模糊查询）
     * @param startCreateTime 课程创建时间（起始）
     * @param endCreateTime   课程创建时间（终止）
     * @param enable          状态
     * @param pageNumber      分页页码
     * @param pageSize        分页容量
     * @return 查询结果
     */
    IPage<BasicCourseResult> basicCoursePage(Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, int pageNumber, int pageSize);

    /**
     * 新增/编辑 课程基础信息
     *
     * @param basicCourseParams 基础课程信息参数
     * @return 新增或编辑的课程id
     */
    Long saveBasicCourse(BasicCourseParams basicCourseParams, SysUser sysUser);

    /**
     * 批量删除课程基本信息（逻辑）
     *
     * @param idList 要删除的课程主键集合
     * @param enable 启用/禁用标志
     * @return 是否删除成功
     */
    Boolean removeBasicCourseBatch(List<Long> idList, Boolean enable);

    /**
     * 根据查询条件批量禁用基础课程
     *
     * @param belongOrgId     所属机构id
     * @param courseName      课程名称（模糊查询）
     * @param startCreateTime 课程创建时间（起始）
     * @param endCreateTime   课程创建时间（终止）
     * @param enable          启用&禁用 状态
     * @param enableOperate   操作 启用&禁用 状态
     */
    Boolean removeBasicCourseBatchByQuery(Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime, Boolean enable, Boolean enableOperate);

    /**
     * 执行批量导入课程逻辑
     *
     * @param finalList 基础课程数据集合
     * @param map       参数
     * @return 结果
     */
    Map<String, Object> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map);

    /**
     * @param schoolId
     * @param courseCode
     * @return
     */
    Long getOrgIdBySchoolIdAndCourseCode(Long schoolId, String courseCode);

    List<BasicCourse> findBySchoolIdAndCourseCode(Long schoolId, List<String> courseCodes);
}
