package com.sptg.video.cloud.biz.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.sptg.common.core.beans.PageBean;
import com.sptg.common.core.beans.ResultBean;
import com.sptg.video.cloud.api.dto.VCDeviceDto;
import com.sptg.video.cloud.api.entity.VCDevice;
import com.sptg.video.cloud.api.entity.SysParams;

import java.util.List;

/**
 * @author zwx
 * @create 2020/10/16 12:35
 */
public interface VCDeviceServiceInterface extends IService<VCDevice> {

    /**
     * 功能描述:分页查询设备信息
     * @param pageBean 设备业务对象（含分页及查询条件）
     * @return ResultBean<Page<Device>>
     *
     *
     */
    Page<VCDevice> pagingQuery(PageBean<VCDevice, VCDeviceDto> pageBean);

    /**
     * 功能描述:分页查询设备信息
     * @return List<VCDevice>
     *
     *
     */
    List<VCDevice> getList();

    /**
     * 功能描述:根据Id查找设备
     * @param id 必填
     * @return Device
     *
     *
     */
    VCDevice findDeviceById(Long id);

    /**
     * 功能描述:根据设备号查找设备
     * @param deviceNum 必填
     * @return Device
     *
     *
     */
    VCDevice findDeviceByNum(String deviceNum);

    /**
     * 功能描述:同步设备列表
     * @param
     * @return List<Device>
     *
     *
     */
    ResultBean<String> syncDeviceList(SysParams sysParams, VCDeviceDto deviceDto);

    /**
     * 功能描述:获取设备视频地址
     * 先获取rtsp格式的地址
     * 对rtsp进行推流，返回http-flv格式播放地址给到前端
     * @param
     * @return List<Device>
     */
    String deviceGetDevUrl(SysParams sysParams, VCDeviceDto deviceDto);

    /**
     * 获取指定账户下的所有设备的播放地址
     * @param accountName
     * @return
     */
    List<String> deviceGetDevUrlList(SysParams sysParams, String accountName);

    /**
     * 功能描述:获取设备http-flv格式视频地址
     * @param
     * @return List<Device>
     */
    ResultBean<String> deviceGetHttpFlvUrl(String deviceNum, String rtspUrl);

    /**
     * 功能描述:推流
     * @param
     * @return List<Device>
     */
    ResultBean<String> devicePusher(VCDeviceDto deviceDto);

    /**
     * 功能描述:获取推流状态
     * @param
     * @return List<Device>
     */
    ResultBean<String> devicePusherStatus(VCDeviceDto deviceDto);

    /**
     * 功能描述:设备推流停止
     * @param
     * @return List<Device>
     */
    ResultBean<String> devicePusherDelete(VCDeviceDto deviceDto);
}
