package com.sundot.airport.common.utils;

import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;

/**
 * 设备台账时间工具类
 *
 * @author ruoyi
 */
public class EquipmentDateUtils extends org.apache.commons.lang3.time.DateUtils {
    // 定义时区，通常取系统默认或UTC
    private static final ZoneId ZONE_ID = ZoneId.systemDefault();

    /**
     * 判断输入日期是否早于当前日期 (昨天及以前)
     */
    public static boolean isBeforeToday(Date inputDate) {
        if (inputDate == null) return false;

        LocalDate inputLocalDate = convertToLocalDate(inputDate);
        LocalDate today = LocalDate.now(ZONE_ID);

        // 严格早于今天 (昨天及以前)
        return inputLocalDate.isBefore(today);
    }

    /**
     * 判断输入日期是否晚于当前日期，且在两周(14天)以内
     * 逻辑：输入日期 > 今天 且 输入日期 <= 今天+14天
     */
    public static boolean isWithinTwoWeeks(Date inputDate) {
        if (inputDate == null) return false;

        LocalDate inputLocalDate = convertToLocalDate(inputDate);
        LocalDate today = LocalDate.now(ZONE_ID);
        LocalDate twoWeeksLater = today.plusDays(14);

        // isAfter 不包含等于，所以如果今天不算"晚于"，用 isAfter
        // 如果包含今天之后的第一天，逻辑如下：
        boolean isAfterToday = inputLocalDate.isAfter(today);
        boolean isWithinRange = !inputLocalDate.isAfter(twoWeeksLater); // 小于等于两周后

        return isAfterToday && isWithinRange;
    }

    /**
     * 判断输入日期是否晚于当前日期，且在一个月(30天)以内
     * 逻辑：输入日期 > 今天 且 输入日期 <= 今天+30天
     */
    public static boolean isWithinOneMonth(Date inputDate) {
        if (inputDate == null) return false;

        LocalDate inputLocalDate = convertToLocalDate(inputDate);
        LocalDate today = LocalDate.now(ZONE_ID);
        LocalDate oneMonthLater = today.plusDays(30); // 或者 plusMonths(1)，视业务需求定

        boolean isAfterToday = inputLocalDate.isAfter(today);
        boolean isWithinRange = !inputLocalDate.isAfter(oneMonthLater);

        return isAfterToday && isWithinRange;
    }

    /**
     * 辅助方法：将 java.util.Date 转换为 LocalDate
     */
    private static LocalDate convertToLocalDate(Date date) {
        return date.toInstant()
                .atZone(ZONE_ID)
                .toLocalDate();
    }
}
