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();
}
