package com.xy.alipay;

import com.xy.annotate.RestMappingController;
import com.xy.dto.spi.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;


/**
 * spi 设备相关
 *
 * @author 谭斌
 * @date 2023/04/16
 */
@RestMappingController({"/spi/device", "/api/device"})
public interface SpiDeviceService {

    /**
     * 设备告警通知
     * 触发条件：设备发生异常时，货柜云平台也会展示
     * 使用场景：接收设备告警，进行相应业务处理和任务触发
     * notify_type：fault_inform
     *
     * @param deviceAlarmNotifyDTO
     * @return
     */
    @PostMapping(value = "/faultInform/notify")
    String deviceAlarmNotify(@RequestBody DeviceAlarmNotifyDTO deviceAlarmNotifyDTO);

    /**
     * 设备恢复通知
     * 触发条件：设备故障会恢复时，货柜云平台也会展示
     * 使用场景：接收设备恢复，进行相应业务处理和任务触发
     *
     * @param deviceAlarmRecoverNotifyDTO
     * @return
     */
    @PostMapping(value = "/recoveryInform/notify")
    String recoveryInform(@RequestBody DeviceAlarmRecoverNotifyDTO deviceAlarmRecoverNotifyDTO);

    /**
     * 设备异常通知
     * 触发条件：动态设备发生重力异常或者摄像头异常，影响到该设备交易的正常识别时，会通过该通知同步到商户
     * 使用场景：接收设备恢复，进行相应业务处理和任务触发
     *
     * @param deviceExceptionNotifyDTO
     * @return
     */
    @PostMapping(value = "/deviceException/notify")
    String deviceExceptionNotify(@RequestBody DeviceExceptionNotifyDTO deviceExceptionNotifyDTO);

    /**
     * 设备状态变更通知
     * 触发条件：设备激活状态或运营状态发生变化时
     * 使用场景：接收设备状态变更，进行相应业务处理和任务触发
     * notify_type：device_status_change
     *
     * @param deviceStatusChangeNotifyDTO
     * @return
     */
    @PostMapping(value = "/status/change/notify")
    String deviceStatusChangeNotify(@RequestBody DeviceStatusChangeNotifyDTO deviceStatusChangeNotifyDTO);

    /**
     * 温度、音量查询SPI通知
     *
     * @param dto dto
     * @return {@link String}
     */
    @PostMapping(value = "/deviceAttr/notify")
    String deviceAttrNotify(@RequestBody DeviceAttributesNotifyDTO dto);

    /**
     * 温度、音量设置SPI通知
     *
     * @param dto dto
     * @return {@link String}
     */
    @PostMapping(value = "/deviceAttrSet/notify")
    String deviceAttrSetNotify(@RequestBody DeviceSetAttributesNotifyDTO dto);


}
