package com.yfd.platform.modules.basedata.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.modules.basedata.domain.DeviceChannel;
import com.yfd.platform.modules.basedata.domain.SubstationPatroldevice;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 变电站_巡视设备 服务类
 * </p>
 *
 *
 * @since 2023-03-28
 */
public interface ISubstationPatroldeviceService extends IService<SubstationPatroldevice> {

    /**********************************
    * 用途说明: 删除巡视设备
    * 参数说明 id 巡视设备id
    * 返回值说明: boolean
    ***********************************/
    boolean deleteSubstationDeviceById(String id);

    /**********************************
    * 用途说明: 设置巡视点位状态
    * 参数说明 id 巡视设备id
    * 参数说明 dataStatus 设备状态
    * 返回值说明: boolean
    ***********************************/
    boolean setSubstationDeviceStatus(String id, String dataStatus);

    /**********************************
    * 用途说明: 根据用户id查询所有摄像头id
    * 参数说明 id 用户id
    * 返回值说明: java.util.List<java.lang.String>
    ***********************************/
    List<String> getCameraIds(String id);

    /**********************************
    * 用途说明: 新增或修改机器人
    * 参数说明 substationPatroldevices
    * 返回值说明: void
    ***********************************/
    void addOrUpdatePatrolRobot(List<SubstationPatroldevice> substationPatroldevices);

    /**********************************
     * 用途说明: 对摄像头添加静默监视任务
     * 参数说明
     * 返回值说明: 无
     ***********************************/
    void addDailyMonitorTask();


    /**********************************
     * 用途说明: 设置静默监视是否启用
     * 参数说明
     * 返回值说明: void
     ***********************************/
    boolean setDailyMonitorStatus(String id, String dailyMonitor);


    /**
     * 判断摄像机是否处于巡视任务状态
     *
     * @param stationcode 变电站编号
     * @param devicecode 摄像机编号
     * @return String 是否工作中
     */
    String isWorkingofPatroldevice(String stationcode,String devicecode);

    /**********************************
    * 用途说明: 摄像机录像完整率统计
    * 参数说明 page
    * 参数说明 stationId
    * 参数说明 patrolDeviceName
    * 参数说明 channel
    * 参数说明 flag
    * 返回值说明: com.baomidou.mybatisplus.extension.plugins.pagination.Page<java.util.Map<java.lang.String,java.lang.Object>>
    ***********************************/
    Page<Map<String, Object>> getCameraIntegrityRate(Page<Map<String, Object>> page, String stationId, String patrolDeviceName, String channel, String flag);

    Page<Map<String, Object>> getCameraStat(Page<Map<String, Object>> page, String stationId, String patrolDeviceName, String channel, String flag);

    List<Map<String, Object>> getCameraStat(String stationCode);

    /**********************************
     * 用途说明: 单个摄像机完整率
     * 参数说明 channelId
     * 返回值说明: java.util.Map<java.lang.String,java.lang.Object>
     ***********************************/
    String getCameraStatByCode(String channelId);

    /**********************************
    * 用途说明: 巡视设备累计运行天数
    * 参数说明 page
    * 参数说明 stationId
    * 参数说明 patrolDeviceName
    * 参数说明 patrolDeviceCode
    * 参数说明 type
    * 返回值说明: com.baomidou.mybatisplus.extension.plugins.pagination.Page<java.util.Map<java.lang.String,java.lang.Object>>
    ***********************************/
    Page<Map<String, Object>> getRobotOnlineRate(Page<Map<String, Object>> page, String stationId, String patrolDeviceName, String patrolDeviceCode, String type);

    /**********************************
     * 用途说明: 巡视设备累计运行天数
     * 返回值说明: com.baomidou.mybatisplus.extension.plugins.pagination.Page<java.util.Map<java.lang.String,java.lang.Object>>
     ***********************************/
    List<Map<String, Object>> getRobotOnlineRate();

    /**********************************
    * 用途说明: 新增巡视设备
    * 参数说明 patrolDeviceInfo
    * 返回值说明: boolean
    ***********************************/
    boolean addPatrolDevice(String patrolDeviceInfo);

    /**********************************
     * 用途说明: 设置静默监视生效区域
     * 参数说明 patrolDeviceInfo
     * 返回值说明: boolean
     ***********************************/
    boolean setEffectiveArea(String type, String id,String effecttivearea);

    /**********************************
    * 用途说明: 导出巡视设备台账
    * 参数说明 stationId 变电站id
     * 参数说明 type 设备类型
     * 参数说明 patrolDeviceName 设备名称
     * 参数说明 deviceModel 设备型号
     * 参数说明 manufacturer 生产厂家
     * 参数说明 response
     * 返回值说明: void
     ***********************************/
    void exportPatrolDeviceList(String stationId, String type, String patrolDeviceName, String deviceModel,
                                String manufacturer, HttpServletResponse response) throws IOException;

    DeviceChannel queryChannelByDeviceIp(String ipaddr);

    List<Map<String, Object>> getDockInfoBySn(String dockSn);

}
