package com.genersoft.iot.vmp.service;

import com.alibaba.fastjson2.JSONArray;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.media.bean.MediaServer;
import com.genersoft.iot.vmp.service.bean.CloudRecordItem;
import com.genersoft.iot.vmp.service.bean.DownloadFileInfo;
import com.genersoft.iot.vmp.service.bean.ErrorCallback;
import com.genersoft.iot.vmp.vmanager.cloudRecord.bean.CloudRecordUrl;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Set;

/**
 * 云端录像管理
 * @author lin
 */
public interface ICloudRecordService {

    /**
     * 分页回去云端录像列表
     */
    PageInfo<CloudRecordItem> getList(int page, int count, String query,  String app, String stream, String startTime, String endTime, List<MediaServer> mediaServerItems, String callId, Boolean ascOrder);

    /**
     * 获取所有的日期
     */
    List<String> getDateList(String app, String stream, int year, int month, List<MediaServer> mediaServerItems);

    /**
     * 添加合并任务
     */
    String addTask(String app, String stream, MediaServer mediaServerItem, String startTime,
                   String endTime, String callId, String remoteHost, boolean filterMediaServer);


    /**
     * 查询合并任务列表
     */
    JSONArray queryTask(String app, String stream, String callId, String taskId, String mediaServerId, Boolean isEnd, String scheme);

    /**
     * 收藏视频，收藏的视频过期不会删除
     */
    int changeCollect(boolean result, String app, String stream, String mediaServerId, String startTime, String endTime, String callId);

    /**
     * 添加指定录像收藏
     */
    int changeCollectById(Integer recordId, boolean result);

    /**
     * 获取播放地址
     */
    DownloadFileInfo getPlayUrlPath(Integer recordId);

    List<CloudRecordItem> getAllList(String query, String app, String stream, String startTime, String endTime, List<MediaServer> mediaServerItems, String callId, List<Integer> ids);

    /**
     * 加载录像文件，形成录像流
     */
    void loadMP4FileForDate(String app, String stream, String date, ErrorCallback<StreamInfo> callback);

    void seekRecord(String mediaServerId,String app, String stream, Double seek, String schema);

    void setRecordSpeed(String mediaServerId, String app, String stream, Integer speed, String schema);

    void deleteFileByIds(Set<Integer> ids);

    void loadMP4File(String app, String stream, int cloudRecordId, ErrorCallback<StreamInfo> callback);

    List<CloudRecordUrl> getUrlListByIds(List<Integer> ids);

    List<CloudRecordUrl> getUrlList(String app, String stream, String callId);
}
