package com.fs.live.service;


import com.fs.common.vo.LiveVo;
import com.fs.common.core.domain.R;
import com.fs.live.domain.Live;
import com.fs.live.vo.LiveConfigVo;
import com.fs.live.vo.LiveListVo;

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

/**
 * 直播Service接口
 *
 * @author fs
 * @date 2025-01-17
 */
public interface ILiveService
{
    /**
     * 查询直播
     *
     * @param liveId 直播主键
     * @return 直播
     */
    public Live selectLiveByLiveId(Long liveId);

    /**
     * 查询企业直播
     * @param liveId            直播ID
     * @param companyId         企业ID
     * @param companyUserId     企业用户ID
     * @return Live
     */
    Live selectLiveByLiveIdAndCompanyIdAndCompanyUserId(Long liveId, Long companyId, Long companyUserId);

    /**
     * 查询直播列表
     *
     * @param live 直播
     * @return 直播集合
     */
    public List<Live> selectLiveList(Live live);

    /**
     * 直播间学员查询直播列表
     *
     * @param
     * @return 直播集合
     */
    List<Live> selectLiveToStudent(String liveName,String status,String startTime,String finishTime);

    /**
     * 新增直播
     *
     * @param live 直播
     * @return 结果
     */
    public int insertLive(Live live);

    /**
     * 修改直播
     *
     * @param live 直播
     * @return 结果
     */
    public int updateLive(Live live);

    /**
     * 批量删除直播
     *
     * @param liveIds 需要删除的直播主键集合
     * @return 结果
     */
    public int deleteLiveByLiveIds(Long[] liveIds);

    /**
     * 删除直播信息
     *
     * @param liveId 直播主键
     * @return 结果
     */
    public int deleteLiveByLiveId(Long liveId);

    /**
     * 直播列表
     * @return
     */
    List<Live> liveList();
    /**
     * 创建直播 获取直播地址
     * @param liveId
     * @return
     */
    R createLiveRoom(Long liveId);
    /**
     * 获取直播地址
     * @param streamKey
     * @return
     */
    R getLiveRoom(String streamKey);
    /**
     * 检测直播 相关权限和配置
     * @param payload
     * @return
     */
    R checkLiving(Map<String, String> payload);

    /**
     * 结束直播
     * @param payload
     * @return
     */
    R closeLiving(Map<String, String> payload);

    /**
     * 验证身份证信息
     * @param payload
     * @return
     */
    R verifyIdInfo(Map<String, String> payload);

    /**
     * 开始循环播放视频
     */
    R startLoopPlay(Live live);

    /**
     * 停止循环播放
     */
    R stopLoopPlay(Live live);

    /**
     * 批量上下架视频
     */
    R handleShelfOrUn(LiveListVo listVo);
    /**
     * 批量删除视频
     */
    R handleDeleteSelected(LiveListVo listVo);

    /**
     * 结束直播
     */
    R finishLive(Live live);

    /**
     * 开始直播
     */
    R startLive(Live live);

    R handleShelfOrUnAdmin(LiveListVo listVo);

    R handleDeleteSelectedAdmin(LiveListVo listVo);

    R copyLive(Live live);

    LiveConfigVo currentActivities(Long liveId);

    List<Live> selectNoEndLiveList();

    void updateBatchById(List<Live> list);

    void updateStatusAndTimeBatchById(List<Live> list);

    /**
     * 查询直播间数据并将直播间数据加入缓存
     */
    List<Live> asyncToCache();
    /**
     * 查询直播间详情并加入缓存
     */
    LiveVo asyncToCacheLiveDetail(Long id);
    /**
     * 查询直播间配并加入缓存
     */
    LiveConfigVo asyncToCacheLiveConfig(Long liveId);

    List<Live> liveCompanyList(Long companyId);

    R subNotifyLive(HashMap<String, Object> param);

    Integer updateLiveIsAudit(Live live);

    int updateLiveEntity(Live live);
}
