package com.usky.cdi.service.vo.info;

import com.usky.cdi.service.vo.base.BaseEnvMonitorPushVO;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 空气湿度推送VO（兼容2021版）
 * MQTT Topic：iotInfo/rh
 * 说明：Float(2,2) → 0.00 ~ 100.00%
 * @author fyc
 * @email yuchuan.fu@chinausky.com
 * @date 2025/11/20
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class HumidityVO extends BaseEnvMonitorPushVO {

    private static final long serialVersionUID = 1L;

    /**
     * 湿度（必填）
     * 类型：Float(2,2)，单位：%
     */
    private Float sensorValue;

    @Override
    public Number getSensorValue() {
        return sensorValue;
    }

    @Override
    protected void validateSensorValue() {
        if (sensorValue == null) throw new IllegalArgumentException("湿度（sensorValue）为必填项");

        // 校验范围：0.00 ~ 100.00%（湿度不可能为负或超过100%）
        if (sensorValue < 0.00f || sensorValue > 100.00f) {
            throw new IllegalArgumentException("湿度值超出范围（0.00 ~ 100.00%），当前值：" + sensorValue);
        }

        // 校验小数位：最多2位
        if (getDecimalDigits(sensorValue) > 2) {
            throw new IllegalArgumentException("湿度值小数位不能超过2位，当前值：" + sensorValue);
        }
    }

    private int getDecimalDigits(float value) {
        String str = String.valueOf(value);
        if (!str.contains(".")) return 0;
        return str.split("\\.")[1].length();
    }
}
