import '../../../../api/connect/rmv/rmv_models.dart'; import '../../../../api/mhsl/custom_timetable_event/custom_timetable_event.dart'; import '../../../../api/webuntis/queries/get_timetable/get_timetable_response.dart'; import 'commute_direction.dart'; sealed class ArbitraryAppointment { const ArbitraryAppointment(); T when({ required T Function(GetTimetableResponseObject lesson) webuntis, required T Function(CustomTimetableEvent event) custom, required T Function(Trip trip, CommuteDirection direction) commute, }) => switch (this) { WebuntisAppointment(:final lesson) => webuntis(lesson), CustomAppointment(:final event) => custom(event), CommuteAppointment(:final trip, :final direction) => commute(trip, direction), }; } class WebuntisAppointment extends ArbitraryAppointment { final GetTimetableResponseObject lesson; const WebuntisAppointment(this.lesson); } class CustomAppointment extends ArbitraryAppointment { final CustomTimetableEvent event; const CustomAppointment(this.event); } class CommuteAppointment extends ArbitraryAppointment { final Trip trip; final CommuteDirection direction; const CommuteAppointment(this.trip, this.direction); }