import 'package:freezed_annotation/freezed_annotation.dart'; import '../../../../../api/marianumconnect/queries/timetable_get_holidays/timetable_get_holidays_response.dart'; import '../../../../../api/marianumconnect/queries/timetable_get_rooms/timetable_get_rooms_response.dart'; import '../../../../../api/marianumconnect/queries/timetable_get_schoolyear/timetable_get_schoolyear_response.dart'; import '../../../../../api/marianumconnect/queries/timetable_get_subjects/timetable_get_subjects_response.dart'; import '../../../../../api/marianumconnect/queries/timetable_get_timegrid/timetable_get_timegrid_response.dart'; import '../../../../../api/marianumconnect/queries/timetable_get_week/timetable_get_week_response.dart'; import '../../../../../api/mhsl/custom_timetable_event/get/get_custom_timetable_event_response.dart'; part 'timetable_state.freezed.dart'; part 'timetable_state.g.dart'; @freezed abstract class TimetableState with _$TimetableState { const TimetableState._(); const factory TimetableState({ @Default({}) Map weekCache, TimetableGetRoomsResponse? rooms, TimetableGetSubjectsResponse? subjects, TimetableGetHolidaysResponse? schoolHolidays, TimetableGetSchoolyearResponse? schoolyear, TimetableGetTimegridResponse? timegrid, GetCustomTimetableEventResponse? customEvents, required DateTime startDate, required DateTime endDate, @Default(0) int dataVersion, // Boundaries learned from past server denials of inaccessible weeks. // Inclusive: weeks whose start is on/before `accessibleEndDate` and // whose end is on/after `accessibleStartDate` are within the user's // permitted range. Null = no upper / lower bound discovered yet. DateTime? accessibleStartDate, DateTime? accessibleEndDate, }) = _TimetableState; factory TimetableState.fromJson(Map json) => _$TimetableStateFromJson(json); Iterable getAllKnownLessons() => weekCache.values.expand((response) => response.entries); bool get hasReferenceData => rooms != null && subjects != null && schoolHolidays != null && customEvents != null; }