package com.pandoli365.bibimbap.jam;

import com.pandoli365.bibimbap.data.JamData;

import java.time.OffsetDateTime;

/**
 * 평가기간 게이트 판정(W2-3 F6 계약 구현, W2-4 설계 §게이트연동 2 / AC-3).
 *
 * <p>평가가 열려 있으려면 잼이 EVAL 상태이고 현재 시각이 [eval_start_at, eval_end_at] 구간 안에 있어야 한다.
 * eval_start_at/eval_end_at 가 NULL 이면 "기간 미설정"으로 보고 닫힘(EVAL 인데 기간 미설정은 운영 오류) 처리한다.
 *
 * <p>now 를 Clock 빈 DI 대신 인자로 받는다 — 테스트에서 경계 시각을 직접 주입하기 위함(설계 inflate 마킹 근거).
 * jam 은 JamData 전체를 받지만 status/eval_start_at/eval_end_at 3필드만 읽는다(호출부 단순화 — getById 반환 그대로 전달).
 */
public final class JamEvalWindow {

    private JamEvalWindow() {
    }

    public static boolean isOpen(JamData jam, OffsetDateTime now) {
        if (jam == null || now == null) {
            return false;
        }
        if (!"EVAL".equals(jam.getStatus())) {
            return false;
        }
        OffsetDateTime start = jam.getEvalStartAt();
        OffsetDateTime end = jam.getEvalEndAt();
        if (start == null || end == null) {
            return false;
        }
        // now ∈ [start, end] (경계 포함)
        return !now.isBefore(start) && !now.isAfter(end);
    }
}
