package com.sooka.sponest.monitor.dahua.service;

import com.dahuatech.hutool.http.Method;
import com.dahuatech.hutool.json.JSONArray;
import com.dahuatech.hutool.json.JSONObject;
import com.dahuatech.icc.exception.ClientException;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.sooka.sponest.monitor.dahua.domain.CenterdataTAttach;
import com.sooka.sponest.monitor.dahua.domain.CentermonitorTMonitoringEquipmentPositionDO;
import com.sooka.sponest.monitor.dahua.domain.PlayBackProperties;

import java.util.List;
import java.util.Map;

public interface DahuaService {
    /**
     * 获取大华账号ip等信息
     *
     */
     AjaxResult getDahuaVideoServer();

    /**
     * 获取大华账号ip等信息（APP）
     *
     */
     AjaxResult getDahuaVideoServerApp();

    /**
     * 获取大华ICC服务
     *
     */
    AjaxResult getDahuaDssServer();

    /**
     * 获取token方法
     * 调用此方法以获取token
     * */
     String getToken();

    /**
     * 获取token方法
     * 调用此方法以密码形式获取token
     * */
    String getTokenByPassword();

    /**
     * 订阅大华事件方法，更换icc服务后需要更改nacos配置
     * 并重新调用此方法以订阅事件
     * 火情报警：business  forest.alarm
     * 设备上/离线：state
     * 设备低电压：alarm 225
     * new String[]{"forest.alarm"}
     * */
     AjaxResult eventSubscribe(String name, String monitorUrl, String category, String[] type) throws ClientException;

    /**
     * 取消事件订阅
     * monitorType 固定为 url
     * category state alarm ...
     * */
     AjaxResult subscribeList(String monitorType, String category) throws ClientException;

    /**
     * 取消事件订阅
     * name 为 ip_port
     * */
     AjaxResult removeEventSubscribe(String name) throws ClientException;

    /**
     * 火点摄像头联动接口
     * @param lng
     * @param lat
     * @param list
     * @return
     */
     AjaxResult rotation(Double lng, Double lat, List<String> list);

    /**
     * 摄像头获取回放
     * @return
     */
    AjaxResult getPlaybackByTime(String properties);

    /**
     * 同步摄像头离线状态
     * 调用此方法以将大华平台摄像头状态同步到一体化平台监控中心
     * */
     AjaxResult synchronizeOfflineCamera();

    /**
     * 获取大华摄像头的预置点
     * */
    AjaxResult getPresetPoints(String channelId);

    /**
     * 预置点控制(添加/删除/定位)
     * */
    public AjaxResult operatePresetPoint(String channelId,String presetPointCode,String presetPointName,String operateType);

    /**
     * 获取记录仪位置数据
     * */
    void insertEquipmentPosition(CentermonitorTMonitoringEquipmentPositionDO centermonitorTMonitoringEquipmentPositionDO);

    /**
     * 远程获取图片路径
     * @param attach_ids
     */
     List<CenterdataTAttach> getImgUrl(List<CenterdataTAttach> attach_ids);

    Long getTimeSeconds(String time);

    JSONObject IccHttpHttpRequest(String url, Method method, String param, String token, String action);

    boolean isWindows();

    String secondsToFormat(Long seconds);
}
