package com.fs.course.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fs.course.domain.FsUserCoursePeriodDays;
import com.fs.course.domain.FsUserWatchCourseStatistics;
import com.fs.his.vo.OptionsVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 营期课程Mapper接口
 *
 * @author fs
 * @date 2025-04-16
 */
public interface FsUserCoursePeriodDaysMapper extends BaseMapper<FsUserCoursePeriodDays>{
    /**
     * 查询营期课程
     *
     * @param id 营期课程主键
     * @return 营期课程
     */
    FsUserCoursePeriodDays selectFsUserCoursePeriodDaysById(Long id);

    /**
     * 查询营期课程列表
     *
     * @param fsUserCoursePeriodDays 营期课程
     * @return 营期课程集合
     */
    List<FsUserCoursePeriodDays> selectFsUserCoursePeriodDaysList(FsUserCoursePeriodDays fsUserCoursePeriodDays);

    /**
     * 新增营期课程
     *
     * @param fsUserCoursePeriodDays 营期课程
     * @return 结果
     */
    int insertFsUserCoursePeriodDays(FsUserCoursePeriodDays fsUserCoursePeriodDays);

    /**
     * 修改营期课程
     *
     * @param fsUserCoursePeriodDays 营期课程
     * @return 结果
     */
    int updateFsUserCoursePeriodDays(FsUserCoursePeriodDays fsUserCoursePeriodDays);

    /**
     * 删除营期课程
     *
     * @param id 营期课程主键
     * @return 结果
     */
    int deleteFsUserCoursePeriodDaysById(Long id);

    /**
     * 批量删除营期课程
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteFsUserCoursePeriodDaysByIds(Long[] ids);

    /**
     * 根据营期ids获取课程
     * @param periodIds 营期ids
     * @return
     */
    List<FsUserCoursePeriodDays> selectCourseVideoList(@Param("periodIds") Set<Long> periodIds);

    /**
     * 查询营期选项列表
     * @param params    参数
     * @return  list
     */
    List<OptionsVO> selectPeriodListByMap(@Param("params") Map<String, Object> params);
    /**
     * 批量修改
     * @param fsUserCoursePeriodDaysList
     */
    void batchUpdateCoursePeriodDays(List<FsUserCoursePeriodDays> fsUserCoursePeriodDaysList);

    /**
     * 开启课程
     * @param now  时间
     */
    void startPeriodCourse(@Param("now") LocalDateTime now);

    /**
     * 关闭课程
     * @param now  时间
     */
    void endPeriodCourse(@Param("now") LocalDateTime now);

    /**
     * 查询视频相关信息
     * @return
     */
    List<FsUserWatchCourseStatistics> selectDaysCountList();

    /**
     * 批量删除
     * @param ids
     * @param delFlag
     */
    @Update("<script>" +
            "UPDATE fs_user_course_period_days SET del_flag = #{delFlag} WHERE id IN " +
            "<foreach collection='ids' item='id' open='(' separator=',' close=')'>" +
            "#{id}" +
            "</foreach>" +
            "</script>")
    int updateBatchDelFlag(@Param("ids") Long [] ids, @Param("delFlag") Integer delFlag);

    Long selectFsUserCoursePeriodDaysCount(FsUserCoursePeriodDays fsUserCoursePeriodDays);

    @Select("SELECT distinct period_id from fs_user_course_period_days  where day_date >=#{periodSTime} and day_date <=#{periodETime} ")
    List<Long> selectFsUserCoursePeriodDaysByTime(@Param("periodSTime") String periodSTime,@Param("periodETime") String periodETime);

    /**
     * @Description: 根据id获取当前营期的所有的大于该id数据lesson的id
     * @Param:
     * @Return:
     * @Author xgb
     * @Date 2025/11/18 11:04
     */
    List<Long> selectFsUserCoursePeriodDaysForLastById(FsUserCoursePeriodDays param);

    List<FsUserCoursePeriodDays> selectFsUserCoursePeriodDaysByCourseId(@Param("courseId") Long courseId);
}
