package com.agri.common.utils;

/**
 * @ClassName dd
 * @Description TODO
 * @Author lld
 * @Date 2026/3/6 1:44
 * @Version 1.0
 */

import com.agri.common.constant.Constants;
import org.springframework.beans.factory.annotation.Value;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 卷膜时间计算工具类（企业标准写法：单例+常量固化）
 */
public class RollerTimeCalculator {

    // 私有化构造器，禁止实例化
    private RollerTimeCalculator() {}

    /**
     * 计算卷膜运行时间（秒）
     * @param targetLen 目标长度（cm，前端统一传入）
     * @return 运行时间（秒）
     */
    public static int calculateRunTime(BigDecimal targetLen) {
        // 边界处理：长度≤0时返回0
        if (targetLen == null || targetLen.compareTo(BigDecimal.ZERO)<=0) {
            return 0;
        }
        // 核心公式：时间 = (长度 / 每圈长度) × 每圈时间
        BigDecimal cycleCount = targetLen.divide(Constants.PER_LAP_LEN,2, RoundingMode.HALF_UP);
        return cycleCount.multiply(Constants.PER_LAP_SEC).setScale(2, RoundingMode.HALF_UP).intValue(); // 四舍五入取整
    }

    /**
     * 进阶：基础参数可配置化（企业进阶方案）
     * 从配置中心/参数表读取perLapLen、perLapSec，避免硬编码
     */
   /* public static long calculateRunTimeWithConfig(double targetLen, String imei) {
        // 从配置表/缓存读取该设备的单圈长度、单圈时间（适配不同设备参数差异）
        Double deviceCmPerCycle = ConfigCache.getVal(imei + "_perLapLen", perLapLen);
        Long deviceSecPerCycle = ConfigCache.getVal(imei + "_sec_per_cycle", perLapSec);
        return Math.round(targetLen / deviceCmPerCycle * deviceSecPerCycle);
    }*/
}
