package com.bonus.sgzb.material.service;

import com.bonus.sgzb.common.core.web.domain.AjaxResult;
import com.bonus.sgzb.material.domain.*;

import java.util.List;

/**
 * @Author ma_sh
 * @create 2024/7/4 16:25
 * iot设备管理服务层
 */
public interface IotMachineService {

    /**
     * 添加设备
     * @param iotDto
     * @return
     */
    AjaxResult add(IotDto iotDto);

    /**
     * 修改设备
     * @param iotDto
     * @return
     */
    AjaxResult update(IotDto iotDto);

    /**
     * 获取设备列表
     * @param iotDto
     * @return
     */
    List<IotVo> getIotList(IotDto iotDto);

    /**
     * 删除设备
     * @param iotId
     * @return
     */
    AjaxResult deleteById(Long iotId);

    /**
     * 绑定设备
     * @param iotDto
     * @return
     */
    AjaxResult bind(IotDto iotDto);

    /**
     * 解绑设备
     * @param iotDto
     * @return
     */
    AjaxResult unbind(IotDto iotDto);

    /**
     * 根据类型id查询设备绑定列表
     * @param iotDto
     * @return
     */
    List<IotVo> getTypeList(IotDto iotDto);

    /**
     * 根据iot设备类型查询设备编码
     * @param iotDto
     * @return
     */
    AjaxResult selectList(IotDto iotDto);

    /**
     * 获取设备记录列表
     * @param iotDto
     * @return
     */
    List<IotRecordVo> getRecordList(IotDto iotDto);

    /**
     * 获取设备定位
     * @param iotDto
     * @return
     */
    IotLocationVo getLocation(IotLocationVo iotLocationVo);

    /**
     * 查询行程
     * @param iotLocationVo
     * @return
     */
    String searchItinerary(IotLocationVo iotLocationVo);

    /**
     * 查询停留点
     * @param iotLocationVo
     * @return
     */
    List<IotLocationVo> reportParkDetailByTime(IotLocationVo iotLocationVo);

    /**
     * App绑定设备
     * @param iotDto
     * @return
     */
    AjaxResult bindApp(IotDto iotDto);

    /**
     * 报警记录
     * @param iotLocationVo
     * @return
     */
    List<IotLocationVo> reportAlarm(IotLocationVo iotLocationVo);

    /**
     * 报警推送
     * @param
     * @return
     */
    int alarmPush();

    List<ReportAlarm> alarmList(IotLocationVo iotLocationVo);

    int alarmManagement(ReportAlarm reportAlarm);
}
