package com.fs.course.service;

import java.util.List;

import com.fs.common.core.domain.R;
import com.fs.common.core.domain.ResponseResult;
import com.fs.course.domain.FsUserCourseVideo;
import com.fs.course.domain.FsUserVideo;
import com.fs.course.param.*;
import com.fs.course.param.newfs.UserCourseVideoPageParam;
import com.fs.course.vo.FsUserCourseVideoListUVO;
import com.fs.course.vo.FsUserCourseVideoQVO;
import com.fs.course.vo.FsUserCourseVideoVO;
import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
import com.fs.course.vo.newfs.FsUserVideoListVO;
import com.fs.his.domain.FsUser;

/**
 * 课堂视频Service接口
 *
 * @author fs
 * @date 2024-05-17
 */
public interface IFsUserCourseVideoService
{
    /**
     * 查询课堂视频
     *
     * @param videoId 课堂视频主键
     * @return 课堂视频
     */
    public FsUserCourseVideo selectFsUserCourseVideoByVideoId(Long videoId);
    public FsUserCourseVideoQVO selectFsUserCourseVideoByVideoIdVO(Long videoId);

    /**
     * 查询课堂视频列表
     *
     * @param fsUserCourseVideo 课堂视频
     * @return 课堂视频集合
     */
    public List<FsUserCourseVideo> selectFsUserCourseVideoList(FsUserCourseVideo fsUserCourseVideo);

    /**
     * 新增课堂视频
     *
     * @param fsUserCourseVideo 课堂视频
     * @return 结果
     */
    public int insertFsUserCourseVideo(FsUserCourseVideo fsUserCourseVideo);

    /**
     * 修改课堂视频
     *
     * @param fsUserCourseVideo 课堂视频
     * @return 结果
     */
    public int updateFsUserCourseVideo(FsUserCourseVideo fsUserCourseVideo);

    /**
     * 批量删除课堂视频
     *
     * @param videoIds 需要删除的课堂视频主键集合
     * @return 结果
     */
    public int deleteFsUserCourseVideoByVideoIds(String[] videoIds);

    /**
     * 删除课堂视频信息
     *
     * @param videoId 课堂视频主键
     * @return 结果
     */
    public int deleteFsUserCourseVideoByVideoId(String videoId);


    List<FsUserCourseVideo> selectFsUserCourseVideoListByCourseId(FsUserCourseVideo fsUserCourseVideo);


    List<FsUserCourseVideoListUVO> selectFsUserCourseVideoListUVOByCourseId(FsUserCourseVideoListUParam param);

    Long selectCourseVideoSort(Long courseId);

    R updateWatchDuration(FsUserCourseVideoFinishUParam param);

    R isAddKf(FsUserCourseVideoAddKfUParam param);

    List<FsUserCourseVideoVO> selectFsUserCourseVideoListByCourseIdAndCompany(FsUserCourseVideoParam fsUserCourseVideo);

    R updateFsUserCourseVideoCompanyRedPacket(FsUserCourseVideoParam fsUserCourseVideo);

    R getInternetTraffic(FsUserCourseVideoFinishUParam param);

    R getIntegralByH5Video(FsUserCourseVideoFinishUParam param);

    R sendReward(FsCourseSendRewardUParam param);

    R sendRewardNew(FsCourseSendRewardUParam param);

    /**
     * 获取课程视频分页列表
     * @return FsUserCourseVideoPageListVO
     */
    List<FsUserCourseVideoPageListVO> pageListCourseVideo(UserCourseVideoPageParam param);

    /**
     * 获取课程视频详情
     * @return FsUserCourseVideoDetailsVO
     */
    ResponseResult<FsUserCourseVideoDetailsVO> getVideoDetails(Long videoId);

    R registerCourse(FsUserCourseRegisterParam param, FsUser fsUser);

    /**
     * 获取下拉视频列表（有分页，仅返回两个字段）
     * @param param 入参
     * @return list
     */
    List<FsUserVideoListVO> getListCourseVideo(UserCourseVideoPageParam param);

}
