package com.platform.plugs.live.handlers;

import com.platform.plugs.live.annotation.RpcParam;
import com.platform.plugs.live.config.LiveStreamConfig;
import com.platform.plugs.live.responseEntity.LiveStreamOnline;
import com.platform.plugs.live.responseEntity.LiveStreams;

import java.util.Date;
import java.util.List;

/**
 * @Author TONG
 * @Date 2019/3/6 14:45
 **/
public interface ILiveStreamHandler {

    void configLiveStream(LiveStreamConfig liveStreamConfig);

    LiveStreamConfig getLiveStream();

    /**
     * 生成流地址
     * @param appName
     * @param streamName
     * @param endDate
     * @return
     */
    LiveStreams generateStreamUrls(String appName, String streamName, Date endDate);

    /**
     * 生成推流地址
     * @param appName
     * @param streamName
     * @param endDate
     * @return
     */
    String generatePushUrl(String appName, String streamName, Date endDate);

    /**
     * 生成播流地址
     * @param appName
     * @param streamName
     * @param endDate
     * @return
     */
    String[] generateLiveUrl(String appName, String streamName, Date endDate);

    /**
     * 查询在线推流的列表，每分钟最多1000次,参数不支持通配符“*”，若无传null
     * @param appName
     * @param streamName
     */
    List<LiveStreamOnline> describeLiveStreamsOnlineList(@RpcParam String appName, String streamName);

    /**
     * 历史在线人数，8小时左右延时，endDate在当前时间之内8小时，报错
     * @param appName
     * @param streams
     * @param startDate
     * @param endDate
     * @return
     */
    int describeLiveStreamHistoryUserNum(String appName, String[] streams, Date startDate, Date endDate);
    /**
     * 生成直播时移时间轴查询地址
     * @param startDate
     * @param endDate
     * @param appName
     * @param streamName
     * 20200305 weiyan
     * @return
     */
    String generateQueryTimeLineUrl(int startDate, int endDate, String appName, String streamName);
    
    /**
     * 生成直播时移地址
     *
     * @param startDate
     * @param endDate
     * @param appName
     * @param streamName
     * @return
     */
    String generateTimeShiftUrl(Date startDate,String appName, String streamName);
}
