package org.jeecg.modules.system.app.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.app.dto.SearchDTO;
import org.jeecg.modules.app.vo.AppCoursesPageVO;
import org.jeecg.modules.app.vo.CourseInfoVO;
import org.jeecg.modules.app.vo.SearchVO;
import org.jeecg.modules.app.vo.course.CourseRequestVo;
import org.jeecg.modules.app.vo.course.CourseResponseVo;
import org.jeecg.modules.system.app.dto.AppCoursesInfoPageDTO;
import org.jeecg.modules.system.app.dto.AppCoursesPageDTO;
import org.jeecg.modules.system.app.entity.AppCourses;

import java.util.Date;
import java.util.List;

/**
 * @Description: 课程/培训表
 * @Author: jeecg-boot
 * @Date:   2025-07-03
 * @Version: V1.0
 */
@Mapper
public interface AppCoursesMapper extends BaseMapper<AppCourses> {
    /**
     * @Author SheepHy
     * @Description 培训课程分页查询
     * @Date 13:37 2025/7/7
     * @Param
     * @return
     **/
    Page<SearchVO.SearchTrainVO> convertSearchTrainVOPage(@Param("page")Page<SearchVO.SearchTrainVO> page,@Param("searchDTO")SearchDTO searchDTO);

    /**
     * @Author SheepHy
     * @Description 课程详情
     * @Date 13:36 2025/7/8
     * @Param id 课程id
     * @return CourseInfoVO {@link CourseInfoVO}
     **/
    CourseInfoVO getCourseInfo(@Param("id")String id);

    IPage<CourseResponseVo> findByCourseList(@Param("page") Page<CourseResponseVo> page,@Param("courseRequestVo") CourseRequestVo courseRequestVo, @Param("date")  Date date);

    IPage<CourseResponseVo> findByLaLoList(@Param("page") Page<CourseResponseVo> page, @Param("courseRequestVo") CourseRequestVo courseRequestVo, @Param("date")  Date date);

    IPage<CourseResponseVo> findByList(@Param("page") Page<CourseResponseVo> page,@Param("courseRequestVo") CourseRequestVo courseRequestVo, @Param("date")  Date date);

    IPage<AppCoursesInfoPageDTO> queryWitchPriceRulesPage(Page<AppCourses> page, @Param("dto") AppCoursesPageDTO dto);

    List<String> findByInstructorId( @Param("instructorId") String instructorId);

    IPage<AppCoursesPageVO> getPageCourse(Page<AppCoursesPageVO> page, @Param("orgCode")String orgCode, @Param("userId")String userId);

    List<AppCoursesPageVO> queryMakeUpClassTable(@Param("orgCode")String orgCode, @Param("userId")String userId);

    /**
     * @Author SheepHy
     * @Description 根据教练ID获取教练订单数
     * @Date 14:14 2025/9/4
     * @Param
     * @return
     **/
    int getInstructorOrderCount(@Param("id") String id);

    /**
     * 查询课程详情（包含逻辑删除数据）
     * @param id
     * @return
     */
    @Select("select * from nm_courses where id = #{id}")
    AppCourses selectAllById(String id);
}
