package com.yonge.cooleshow.biz.dal.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yonge.cooleshow.biz.dal.dao.LiveRoomDao;
import com.yonge.cooleshow.biz.dal.entity.*;
import com.yonge.cooleshow.biz.dal.vo.RoomVo;

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

import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.LIVE_ROOM_LIKE;
import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.ROOM_UID;

/**
 * 直播房间与课程的关系表表(LiveRoom)表服务接口
 *
 * @author hgw
 * @since 2022-03-18 15:41:17
 */
public interface LiveRoomService extends IService<LiveRoom> {

    LiveRoomDao getDao();

    /**
     * 根据房间uid查询房间信息
     *
     * @param roomUid 房间uid
     */
    RoomVo queryRoomInfo(String roomUid);

    /**
     * 定时任务创建直播间
     */
    void createCourseLiveRoom();

    /**
     * 定时任务-清理过期的房间
     */
    void destroyExpiredLiveRoom();

    /**
     * 创建临时房间-直播间
     */
    String createTempLiveRoom(Map<String, Object> param);

    /**
     * <p>主讲人处理进入和退出房间数据
     * <p>观看者只处理退出房间数据
     *
     * @param userState 用户状态数据
     */
    void opsRoom(List<ImUserStateSync> userState);

    /**
     * 同步点赞数量
     *
     * @param roomUid 房间uid
     * @param likeNum 点赞数
     */
    void syncLike(String roomUid, Integer likeNum);

    /**
     * 进入房间
     *
     * @param roomUid 房间uid
     * @param userId  用户id 主讲人或者用户的id
     */
    RoomInfoCache joinRoom(String roomUid, Long userId);

    /**
     * 查询在观看直播的用户信息
     *
     * @param roomUid 直播间uid
     */
    List<RoomUserInfoCache> queryRoomUserInfo(String roomUid);

    /**
     * 发送消息
     *
     * @param message
     */
    void publishRoomMessage(ImRoomMessage message);

    /**
     * 方便测试观察房间数据的方法
     */
    Map<String, Object> test(String roomUid);


    LiveRoom getliveingRoomBySpeakerId(Long speakerId);

}

