package com.agri.common.utils;

import com.agri.common.enums.TempCommandStatus;

import java.math.BigDecimal;

/**
 * 温度判断工具类
 */
public class TempJudgeUtil {
    // 条件参考温度允许的上下误差（抽成常量，后续可配置化）
    public static final BigDecimal TEMP_ERROR_RANGE = BigDecimal.valueOf(0.5);

    /**
     * 温度判断核心方法：根据当前温度与参考温度的差值，返回指令状态
     *
     * @param currentTemp 当前温度（DTU上报的温度）
     * @param refTemp     条件参考温度（sys_auto_term的temp字段）
     * @return 指令状态：OPEN(开)/CLOSE(关)/NO_OPERATE(不操作)
     */
    public static TempCommandStatus judgeTempCommand(BigDecimal currentTemp, BigDecimal refTemp) {
        // 1. 空值校验（企业级必备，避免NPE）
        if (currentTemp == null || refTemp == null) {
            return TempCommandStatus.NO_OPERATE;
        }

        // 2. 计算当前温度与参考温度的差值（当前温度 - 参考温度）
        BigDecimal tempDiff = currentTemp.subtract(refTemp);

        // 3. 按规则判断状态
        if (tempDiff.compareTo(TEMP_ERROR_RANGE) > 0) {
            // 当前温度 > 参考温度 + 误差 → 下发开指令
            return TempCommandStatus.OPEN;
        } else if (tempDiff.compareTo(TEMP_ERROR_RANGE.negate()) < 0) {
            // 当前温度 < 参考温度 - 误差 → 下发关指令
            return TempCommandStatus.CLOSE;
        } else {
            // 差值在[-误差, +误差]范围内 → 不操作
            return TempCommandStatus.NO_OPERATE;
        }
    }
}
