
package com.tmerclub.cloud.live.service;

import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.live.dto.LiveRoomDTO;
import com.tmerclub.cloud.live.model.LiveRoom;
import com.tmerclub.cloud.live.vo.LiveRoomVO;

import java.util.List;

/**
 * 直播间
 * @author TRACK
 */
public interface LiveRoomService {

    /**
     * 分页获取直播间列表
     * @param pageDTO 分页参数
     * @param liveRoom
     * @return 直播间列表分页数据
     */
    PageVO<LiveRoomVO> page(PageDTO pageDTO, LiveRoomDTO liveRoom);

    /**
     * 根据直播间id获取直播间
     * @param roomId 直播间id
     * @return 直播间
     */
    LiveRoomVO getByRoomId(Long roomId);

    /**
     * 保存直播间
     * @param liveRoomDTO 直播间
     */
    void save(LiveRoomDTO liveRoomDTO);

    /**
     * 更新直播间和商品
     * @param liveRoomDTO 直播间
     */
    void update(LiveRoomDTO liveRoomDTO);

    /**
     * 更新直播间
     * @param liveRoom
     */
    void updateById(LiveRoom liveRoom);

    /**
     * 根据直播间id删除直播间
     * @param roomId 直播间id
     */
    void deleteById(Long roomId);

    /**
     * 下线直播间
     * @param liveRoomDTO
     */
    void offline(LiveRoomDTO liveRoomDTO);

    /**
     * 根据用户id获取该用户开播的直播间信息
     * @param userId
     * @return
     */
    LiveRoomVO getByUserId(Long userId);

    /**
     * 获取用户当前正在开播的直播间信息
     * @param userId
     * @param roomId
     * @return
     */
    LiveRoomVO getLivingRoomInfo(Long userId, Long roomId);

    /**
     * 分页获取直播间列表
     * @param pageDTO 分页参数
     * @param liveRoom
     * @return 直播间列表分页数据
     */
    PageVO<LiveRoomVO> pageRoomAndDetail(PageDTO pageDTO, LiveRoomDTO liveRoom);

    /**
     * 更新直播间状态
     * @param liveStatus
     * @param roomIds
     */
    void updateLiveRoomStatus(Integer liveStatus, List<Long> roomIds);

    /**
     * 主播状态改变，暂停直播间
     * @param userId
     */
    void unableLiveRoom(Long userId);

    /**
     * 根据店铺id获取需要被结束的直播间
     * @param shopIds
     * @return
     */
    List<Long> listRoomIdsByShopId(List<Long> shopIds);
}
