package com.njcn.rdms.module.project.util;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjusters;

/**
 * dueRange 截止时间范围筛选的日期边界 helper。
 *
 * <p>口径统一：服务器时区 {@code Asia/Shanghai}，本周按周一~周日。
 * 供执行分页查询与执行状态看板计数共用，避免在多个 service 里重复同一段日期计算。</p>
 *
 * <p>终态排除不在此处：终态码由各对象域自行通过
 * {@code ObjectStatusModelMapper.selectTerminalStatusCodesByObjectTypeEnabled(objectType)} 动态查。</p>
 */
public final class DueRangeSupport {

    private static final ZoneId SERVER_ZONE = ZoneId.of("Asia/Shanghai");

    private DueRangeSupport() {
    }

    /** 服务器当天。 */
    public static LocalDate today() {
        return LocalDate.now(SERVER_ZONE);
    }

    /** 本周一（含当天）。 */
    public static LocalDate weekStart(LocalDate today) {
        return today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
    }

    /** 本周日（含当天）。 */
    public static LocalDate weekEnd(LocalDate today) {
        return today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
    }
}
