export function preferredScheduleSemester(semesters, date) { const items = (semesters || []) .filter(semester => semester?.startDate && semester?.endDate); const current = items.find(semester => semester.startDate <= date && semester.endDate >= date ); if (current) return current; const upcoming = items .filter(semester => semester.startDate > date) .sort((first, second) => first.startDate.localeCompare(second.startDate)); if (upcoming.length) return upcoming[0]; return items .filter(semester => semester.endDate < date) .sort((first, second) => second.endDate.localeCompare(first.endDate))[0] || null; } export function defaultSchedulePeriod(semesters, date, durationDays = 14) { const semester = preferredScheduleSemester(semesters, date); const startDate = semester && (date < semester.startDate || date > semester.endDate) ? semester.startDate : date; const calculatedEnd = addIsoDays(startDate, Math.max(1, durationDays) - 1); return { semester, startDate, endDate: semester && calculatedEnd > semester.endDate ? semester.endDate : calculatedEnd }; } function addIsoDays(value, days) { const [year, month, day] = String(value).split('-').map(Number); const date = new Date(year, month - 1, day); date.setDate(date.getDate() + days); return [ date.getFullYear(), String(date.getMonth() + 1).padStart(2, '0'), String(date.getDate()).padStart(2, '0') ].join('-'); }