package com.data.emqx.service;

/**
 * @author licd
 * @className IDeviceDataService
 * @description 设备数据处理服务接口
 * @date 2026/03/17
 */

public interface IDeviceDataService {

    /**
     * 检查是否已存在相同的称重&标签数据
     *
     * @param deviceId  设备ID
     * @param seqNum    序列号
     * @return true表示已存在，false表示不存在
     */
    boolean existsWeightRfidData(String deviceId, Long seqNum);

    /**
     * 保存称重&标签数据
     *
     * @param deviceId  设备ID
     * @param seqNum    序列号
     * @param sendTime  发送时间（UTC0时间戳）
     * @param weight    重量
     * @param rfid      RFID标签（逗号分隔的字符串）
     */
    void saveWeightRfidData(String deviceId, Long seqNum, Long sendTime, Integer weight, String rfid);

    /**
     * 检查是否已存在相同的告警数据
     *
     * @param deviceId  设备ID
     * @param seqNum    序列号
     * @return true表示已存在，false表示不存在
     */
    boolean existsAlarmData(String deviceId, Long seqNum);

    /**
     * 保存告警数据
     *
     * @param deviceId  设备ID
     * @param seqNum    序列号
     * @param sendTime  发送时间（UTC0时间戳）
     * @param uwb       UWB异常数据（格式化字符串）
     * @param uwbArray  UWB原始数据数组
     */
    void saveAlarmData(String deviceId, Long seqNum, Long sendTime, String uwb, com.alibaba.fastjson.JSONArray uwbArray);

    /**
     * 检查是否已存在相同的心跳数据
     *
     * @param deviceId  设备ID
     * @param sendTime  发送时间（UTC0时间戳）
     * @return true表示已存在，false表示不存在
     */
    boolean existsHeartData(String deviceId, Long sendTime);

    /**
     * 保存心跳数据
     *
     * @param deviceId    设备ID
     * @param sysVol      系统电压（Float类型）
     * @param netRSSI     网络信号强度
     * @param sendTime    发送时间（UTC0时间戳）
     */
    void saveHeartData(String deviceId, Double sysVol, Integer netRSSI, Long sendTime);

    /**
     * V2.0.1 保存OTA升级进度数据
     *
     * @param deviceId  设备ID
     * @param taskID    升级任务ID
     * @param progress  升级进度（0-100）
     * @param status    升级状态（OK/Fail）
     */
    void saveOtaProgressData(String deviceId, String taskID, Integer progress, String status);

    /**
     * V2.0.1 保存设备参数读取响应数据
     *
     * @param deviceId  设备ID
     * @param seqNum    序列号
     * @param params    参数JSON对象
     */
    void saveParamReadData(String deviceId, Long seqNum, com.alibaba.fastjson.JSONObject params);

    /**
     * V2.0.1 保存设备参数写入响应数据
     *
     * @param deviceId    设备ID
     * @param seqNum      序列号
     * @param status      写入状态（OK/Fail）
     * @param failReason  失败原因（可选）
     */
    void saveParamWriteData(String deviceId, Long seqNum, String status, String failReason);
}
