package cn.iocoder.yudao.module.pms.util;

import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalTime;

public class LocalTimeUtils {
    /**
     * 计算两个LocalTime之间的间隔小时数（处理空值、跨天情况）
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 间隔小时数（保留2位小数），空值返回0
     */
    public static BigDecimal calculateDurationHours(LocalTime startTime, LocalTime endTime) {
        // 处理空值情况：任意一个时间为空，返回0
        if (startTime == null || endTime == null) {
            return BigDecimal.ZERO;
        }

        // 计算时间间隔（秒）
        long seconds;
        if (endTime.isAfter(startTime)) {
            // 正常情况：结束时间在开始时间之后
            seconds = Duration.between(startTime, endTime).getSeconds();
        } else {
            // 跨天情况：结束时间在开始时间之前（如23:00到01:00）
            // 先计算到当天结束的秒数，再加次日开始到结束时间的秒数
            seconds = Duration.between(startTime, LocalTime.MAX).getSeconds() + 1; // 23:59:59到startTime的秒数+1秒=当天剩余秒数
            seconds += Duration.between(LocalTime.MIN, endTime).getSeconds();     // 次日00:00到endTime的秒数
        }

        // 转换为小时数（秒数 / 3600），保留2位小数
        BigDecimal hours = BigDecimal.valueOf(seconds).divide(BigDecimal.valueOf(3600), 2, BigDecimal.ROUND_HALF_UP);

        return hours;
    }
}
