import { IDaySchedule, IScheduleSettings, WeekDay } from '@core/types'

/**
 *  Get all opening and closing timings for given date
 *	@param date
 * 	@param schedule Schedule settings of restaurant
 */
export function getDaySchedule(date: Date, schedule?: IScheduleSettings): IDaySchedule {
	if (!schedule) {
		return {
			closed: false,
			rules: [{ openingTime: { hours: 0, minutes: 0 }, closingTime: { hours: 24, minutes: 0 } }],
		}
	}

	const specialDay = schedule.specialDays.find(
		(day) => new Date(day.date).getDate() === date.getDate() && new Date(day.date).getMonth() === date.getMonth(),
	)
	if (specialDay && (specialDay.recurring || new Date(specialDay.date).getFullYear() === date.getFullYear())) {
		return { closed: specialDay.closed, rules: specialDay.rules }
	}

	const currentDay = getWeekDay(date)
	return schedule.weeklySchedule[currentDay]
}

/**
 * Get day of week as {@link WeekDay} for a date
 * @param date
 * @returns WeekDay
 */
function getWeekDay(date: Date): WeekDay {
	return date.toLocaleDateString('en-Us', { weekday: 'long' }) as WeekDay
}
