import { isMothershipWeekendIso, parseIsoDateLocal, toIsoDateLocal, } from "@/lib/mothership/logged-in-constraints"; export type MothershipWeekdayCell = { iso: string; day: number; inMonth: boolean; disabled: boolean; isWeekend: boolean; isPast: boolean; isSelected: boolean; }; export function isMothershipDateSelectable( iso: string, minIso: string, ): boolean { const d = parseIsoDateLocal(iso); const min = parseIsoDateLocal(minIso); if (!d || !min) return false; if (isMothershipWeekendIso(iso)) return false; return d.getTime() >= min.getTime(); } export function buildMothershipWeekdayGrid( year: number, month: number, selectedIso: string | undefined, minIso: string, ): MothershipWeekdayCell[] { const first = new Date(year, month, 1, 12, 0, 0); const startPad = first.getDay(); const daysInMonth = new Date(year, month + 1, 0).getDate(); const cells: MothershipWeekdayCell[] = []; for (let i = 0; i < startPad; i += 1) { const d = new Date(year, month, -(startPad - 1 - i), 12, 0, 0); const iso = toIsoDateLocal(d); cells.push({ iso, day: d.getDate(), inMonth: false, disabled: true, isWeekend: isMothershipWeekendIso(iso), isPast: true, isSelected: false, }); } for (let day = 1; day <= daysInMonth; day += 1) { const d = new Date(year, month, day, 12, 0, 0); const iso = toIsoDateLocal(d); const weekend = isMothershipWeekendIso(iso); const selectable = isMothershipDateSelectable(iso, minIso); cells.push({ iso, day, inMonth: true, disabled: !selectable, isWeekend: weekend, isPast: !selectable && !weekend, isSelected: selectedIso === iso, }); } while (cells.length % 7 !== 0) { const last = cells[cells.length - 1]!; const d = parseIsoDateLocal(last.iso)!; d.setDate(d.getDate() + 1); const iso = toIsoDateLocal(d); cells.push({ iso, day: d.getDate(), inMonth: false, disabled: true, isWeekend: isMothershipWeekendIso(iso), isPast: true, isSelected: false, }); } return cells; } export function formatMothershipWeekdayDateLabel(iso: string): string { const d = parseIsoDateLocal(iso); if (!d) return iso; const wd = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"][ d.getDay() ]!; const yyyy = d.getFullYear(); const mm = String(d.getMonth() + 1).padStart(2, "0"); const dd = String(d.getDate()).padStart(2, "0"); return `${yyyy}-${mm}-${dd}(${wd})`; } export function monthLabelZh(year: number, month: number): string { return `${year}年${month + 1}月`; }