package com.fs.course.service;

import java.util.List;

import com.fs.common.core.domain.R;
import com.fs.course.domain.FsUserCourse;
import com.fs.course.param.FsUserCourseAddStudyCourseParam;
import com.fs.course.param.FsUserCourseGetIntegralParam;
import com.fs.course.param.FsUserCourseListUParam;
import com.fs.course.param.FsUserCourseParam;
import com.fs.course.param.newfs.FsUserCourseListParam;
import com.fs.course.vo.*;
import com.fs.course.vo.newfs.FsUserCourseListVO;
import com.fs.his.vo.OptionsVO;

/**
 * 课程Service接口
 *
 * @author fs
 * @date 2024-05-15
 */
public interface IFsUserCourseService
{
    /**
     * 查询课程
     *
     * @param courseId 课程主键
     * @return 课程
     */
    public FsUserCourse selectFsUserCourseByCourseId(Long courseId);

    /**
     * 查询课程列表
     *
     * @param fsUserCourse 课程
     * @return 课程集合
     */
    public List<FsUserCourse> selectFsUserCourseList(FsUserCourse fsUserCourse);

    /**
     * 新增课程
     *
     * @param fsUserCourse 课程
     * @return 结果
     */
    public int insertFsUserCourse(FsUserCourse fsUserCourse);

    /**
     * 修改课程
     *
     * @param fsUserCourse 课程
     * @return 结果
     */
    public int updateFsUserCourse(FsUserCourse fsUserCourse);

    /**
     * 批量删除课程
     *
     * @param courseIds 需要删除的课程主键集合
     * @return 结果
     */
    public int deleteFsUserCourseByCourseIds(Long[] courseIds);

    /**
     * 删除课程信息
     *
     * @param courseId 课程主键
     * @return 结果
     */
    public int deleteFsUserCourseByCourseId(Long courseId);


    FsUserCourseUVO selectFsUserCourseUVOByCourseId(Long courseId);


    int updateViews(Long courseId);

    int updateShares(Long courseId);

    int updateLikes(Long courseId, Integer type);

    int updateFavorite(Long courseId, Integer type);

    List<FsUserCourseListUVO> selectFsUserCourseListUVO(FsUserCourseListUParam param);

    List<OptionsVO> selectFsUserCourseAllList();

    List<FsUserCourseListPVO> selectFsUserCourseListPVO(FsUserCourse param);

    int updateDuration(FsUserCourseAddStudyCourseParam param);

    R addStudyCourse(FsUserCourseAddStudyCourseParam param);

    int updateFsUserCourseIsShow(Long[] courseIds, int status);

    R getIntegralByCourseVideo(FsUserCourseGetIntegralParam param);


    List<FsUserCourseListUVO> selectFsUserCourseCommentListUVO(FsUserCourseListUParam param);


    FsUserCourseVideoH5VO selectFsUserCourseVideoH5VOByVideoId(Long videoId);

    FsUserCourseVideoH5DVO selectFsUserCourseVideoH5DVOByVideoId(Long videoId);

    List<FsUserCourseListPVO> selectFsUserCourseListCompanyPVO(FsUserCourseParam fsUserCourse);

    List<FsUserCourseListVO> getFsUserCourseList(FsUserCourseListParam param);
}
