import { preferredScheduleSemester } from './schedule-period.js'; export function academicYearsFromSemesters(semesters = []) { const years = new Map(); semesters.forEach(semester => { const id = String(semester?.academicYearId ?? ''); if (!id || years.has(id)) return; years.set(id, { id, title: semester.academicYearTitle || `Учебный год ${id}` }); }); return [...years.values()]; } export function semestersForAcademicYear(semesters = [], academicYearId = '') { return semesters.filter(semester => String(semester?.academicYearId ?? '') === String(academicYearId) ); } export function resolveAcademicPeriod(semesters = [], options = {}) { if (!semesters.length) return { academicYearId: '', semesterId: '' }; const requestedSemester = semesters.find(semester => String(semester.id) === String(options.semesterId || '') ); const availableYearIds = new Set(academicYearsFromSemesters(semesters).map(year => year.id)); const requestedYearId = availableYearIds.has(String(options.academicYearId || '')) ? String(options.academicYearId) : ''; const preferred = preferredScheduleSemester(semesters, options.date || isoToday()) || semesters[0]; const academicYearId = requestedSemester ? String(requestedSemester.academicYearId) : (requestedYearId || String(preferred?.academicYearId || semesters[0].academicYearId)); const yearSemesters = semestersForAcademicYear(semesters, academicYearId); const semester = requestedSemester && String(requestedSemester.academicYearId) === academicYearId ? requestedSemester : (preferredScheduleSemester(yearSemesters, options.date || isoToday()) || yearSemesters[0]); return { academicYearId, semesterId: String(semester?.id || '') }; } function isoToday() { const date = new Date(); const offset = date.getTimezoneOffset() * 60_000; return new Date(date.getTime() - offset).toISOString().slice(0, 10); }