package com.Modules.etl;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class TimeWindowCalculator {

    /**
     * 获取前一个5分钟完整时间周期的开始时间和结束时间
     * @param currentTime 当前任务调度时间
     * @return 包含开始时间和结束时间的数组，[0]=开始时间，[1]=结束时间
     */
    public static LocalDateTime[] getPrevious5MinuteWindow(LocalDateTime currentTime) {
        // 获取当前时间的分钟数
        int currentMinute = currentTime.getMinute();

        // 计算前一个5分钟周期的结束分钟数（向下取整到5的倍数）
        int previousWindowEndMinute = (currentMinute / 5) * 5;

        // 构建前一个周期的结束时间
        LocalDateTime previousWindowEnd = currentTime
                .withMinute(previousWindowEndMinute)
                .withSecond(0)
                .withNano(0);

        // 前一个周期的开始时间是结束时间减去5分钟
        LocalDateTime previousWindowStart = previousWindowEnd.minusMinutes(5);

        return new LocalDateTime[]{previousWindowStart, previousWindowEnd};
    }

    /**
     * 重载方法：使用当前系统时间
     */
    public static LocalDateTime[] getPrevious5MinuteWindow() {
        return getPrevious5MinuteWindow(LocalDateTime.now());
    }

    public static void main(String[] args) {
        // 测试用例
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 测试1: 15:06:00
        LocalDateTime testTime1 = LocalDateTime.of(2025, 11, 18, 15, 7, 15);
        LocalDateTime[] window1 = getPrevious5MinuteWindow(testTime1);
        System.out.println("当前时间: " + testTime1.format(formatter));
        System.out.println("前一个5分钟周期: " +
                window1[0].format(formatter) + " - " +
                window1[1].format(formatter));
        System.out.println();

        // 测试2: 15:10:00
        LocalDateTime testTime2 = LocalDateTime.of(2025, 11, 18, 15, 12, 20);
        LocalDateTime[] window2 = getPrevious5MinuteWindow(testTime2);
        System.out.println("当前时间: " + testTime2.format(formatter));
        System.out.println("前一个5分钟周期: " +
                window2[0].format(formatter) + " - " +
                window2[1].format(formatter));
        System.out.println();

        // 测试3: 整点情况 16:00:00
        LocalDateTime testTime3 = LocalDateTime.of(2025, 11, 18, 16, 0, 15);
        LocalDateTime[] window3 = getPrevious5MinuteWindow(testTime3);
        System.out.println("当前时间: " + testTime3.format(formatter));
        System.out.println("前一个5分钟周期: " +
                window3[0].format(formatter) + " - " +
                window3[1].format(formatter));
        System.out.println();

        // 测试4: 使用当前系统时间
        LocalDateTime[] currentWindow = getPrevious5MinuteWindow();
        System.out.println("当前系统时间的前一个5分钟周期: " +
                currentWindow[0].format(formatter) + " - " +
                currentWindow[1].format(formatter));
    }
}