import { RESULT_WAIT_MINUTES } from "@/lib/config";
/**
* ★結果待ちか★(ユーザー判断 2026-10-07。D-173)— ★判定はこの関数1本★。
*
* レポートは清掃の後 30 分より遅れて届くことがあるため、★予定の終了(無ければ開始)から
* `waitMinutes`(既定 `RESULT_WAIT_MINUTES`)分のあいだは、レポートが無くても出発失敗に数えない★。
*
* - レポートあり → `false`
* - `startAt > now`(未来の予定)→ `false`(★この関数の対象外★。未来の予定は今までどおり行が出ない・数えない)
* - `now < (endAt ?? startAt) + waitMinutes` → `true`(★清掃中も含む★。境界ちょうどは `false`=確定)
* - それ以外 → `false`(今までどおり出発失敗)
*
* ★`true` でも行の `departed` / `task_status` / `completion_rate` / `grade` は変えない★ —
* 結果待ちは `CleanLogItem.result_pending` という別の旗で表す(旗を見ない処理は安全側に出発失敗のまま)。
* ★D-091 項1(当方で「予定+猶予」を計算しない)は、この件に限りユーザー判断で上書き★。
* `LAUNCH_GRACE_MINUTES` は使わない。
*
* ★`Date` は「真の瞬間」で渡すこと★(DB の壁時計値は `fromDbJst()` で直してから)。期待値表は
* `lib/clean-logs/__tests__/result-pending.test.ts`(表1)。
*/
export function isResultPending(params: {
startAt: Date;
endAt: Date | null;
now: Date;
hasReport: boolean;
waitMinutes?: number;
}): boolean {
const { startAt, endAt, now, hasReport, waitMinutes = RESULT_WAIT_MINUTES } = params;
if (hasReport) return false;
if (startAt.getTime() > now.getTime()) return false;
const base = (endAt ?? startAt).getTime();
return now.getTime() < base + waitMinutes * 60_000;
}