package com.limap.core.screen.domain;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;

/**
 * TDengine 设备传感器数据
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeviceSensorData {

    // 测量字段（随时间变化的数值）
    private String time;               // 时序主键时间戳
    private String createTime;         // 数据创建时间
    private Double dissolvedOxygen;    // 溶解氧
    private Double temperature;        // 温度
    private Double saturability;       // 饱和度
    private Double ph;                 // pH值
    private Double salinity;           // 盐度
    private Double treference;         // 参考值
    private Double tfluorescence;      // 荧光值
    private Double phaseDifference;    // 相位差
    private Double battery;            // 电池电量

    // Getter 方法，返回保留两位小数的值
    public Double getDissolvedOxygen() {
        return roundToTwoDecimals(dissolvedOxygen);
    }

    public Double getTemperature() {
        return roundToTwoDecimals(temperature);
    }

    public Double getSaturability() {
        return roundToTwoDecimals(saturability);
    }

    public Double getPh() {
        return roundToTwoDecimals(ph);
    }

    public Double getSalinity() {
        return roundToTwoDecimals(salinity);
    }

    public Double getTreference() {
        return roundToTwoDecimals(treference);
    }

    public Double getTfluorescence() {
        return roundToTwoDecimals(tfluorescence);
    }

    public Double getPhaseDifference() {
        return roundToTwoDecimals(phaseDifference);
    }

    public Double getBattery() {
        return roundToTwoDecimals(battery);
    }

    // 工具方法：保留两位小数
    private Double roundToTwoDecimals(Double value) {
        if (value == null) {
            return null;
        }
        return BigDecimal.valueOf(value)
                .setScale(2, RoundingMode.HALF_UP)
                .doubleValue();
    }

    // 标签字段（元数据，不随时间频繁变化）
    private String tenantId = "111111";       // 租户ID（默认值）
    private String serialNum;                 // 设备序列号
    private Long deviceId;                    // 设备ID
    private Long userId;                      // 用户ID
    private String userName;                  // 用户名
    private String mobilePhone;               // 手机号
    private String deviceName;                // 设备名称
    private Integer deviceType;               // 设备类型
}
