import assert from 'node:assert/strict';
import test from 'node:test';

import {
    findSemesterForDate,
    scheduleRangeForSemester,
    semesterOptionLabel
} from '../admin/js/views/schedule-view.js';

const autumnSemester = {
    id: 11,
    academicYearTitle: '2025/2026',
    semesterType: 'autumn',
    startDate: '2025-09-01',
    endDate: '2026-01-31'
};

const springSemester = {
    id: 12,
    academicYearTitle: '2025/2026',
    semesterType: 'spring',
    startDate: '2026-02-09',
    endDate: '2026-06-30'
};

test('семестр определяется по выбранной дате включительно с границами', () => {
    const semesters = [autumnSemester, springSemester];

    assert.equal(findSemesterForDate(semesters, '2025-09-01')?.id, 11);
    assert.equal(findSemesterForDate(semesters, '2026-06-30')?.id, 12);
    assert.equal(findSemesterForDate(semesters, '2026-07-01'), null);
});

test('при выборе другого семестра диапазон начинается с его первой учебной недели', () => {
    assert.deepEqual(scheduleRangeForSemester('2026-07-21', autumnSemester), {
        startDate: '2025-09-01',
        endDate: '2025-09-14'
    });
});

test('внутри выбранного семестра сохраняется текущая двухнедельная точка просмотра', () => {
    assert.deepEqual(scheduleRangeForSemester('2026-03-18', springSemester), {
        startDate: '2026-03-16',
        endDate: '2026-03-29'
    });
});

test('название семестра содержит учебный год, тип и границы', () => {
    assert.equal(
        semesterOptionLabel(springSemester),
        '2025/2026 · Весенний семестр · 09.02.2026 — 30.06.2026'
    );
});
