import { Day, DAY_INDEX } from "../models/Constants"; /** * Get a date for a specific weekday relative to today. * @param day - The target day (e.g., "Friday") * @param offset - 1 = next occurrence, 2 = the one after, -1 = last occurrence, etc. * @param hour - Hour of day (0-23) * @param minute - Minute (0-59) */ export function getDay( day: Day, offset: number, hour: number, minute: number, ): Date { const today = new Date(); const currentDay = today.getDay(); const targetDay = DAY_INDEX[day]; let daysUntil = targetDay - currentDay; if (offset > 0) { // Future: if target is today or past, move to next week if (daysUntil <= 0) daysUntil += 7; daysUntil += (offset - 1) * 7; } else if (offset < 0) { // Past: if target is today or future, move to last week if (daysUntil >= 0) daysUntil -= 7; daysUntil += (offset + 1) * 7; } const result = new Date(today); result.setDate(today.getDate() + daysUntil); result.setHours(hour, minute, 0, 0); return result; } /** * Check if an event spans multiple days. * Compares dates at midnight to determine if start and end are on different calendar days. */ export function isMultiDayEvent(start: Date, end: Date): boolean { const startDate = new Date(start); const endDate = new Date(end); startDate.setHours(0, 0, 0, 0); endDate.setHours(0, 0, 0, 0); return startDate.getTime() !== endDate.getTime(); }