import '../incomingPacket.dart';

class TimetablePacket extends IncomingPacket {
  TimetablePacket() : super('timetable');

  TimeTableData _timeTable = TimeTableData();
  TimeTableData get timeTable => _timeTable;

  @override
  void handle(data) {
    _timeTable = TimeTableData();
    data.forEach((day) {
      TimeTableDay dayData = TimeTableDay(List<TimeTableEntry>.empty(growable: true), day['title']);
      day['tiles'].forEach((tile) {
        dayData._entries.add(TimeTableEntry(
            tile['title'], tile['title'], tile['room'], tile['title'],
            TimeTableEntryTime(tile['begin']['hour'], tile['begin']['minute']),
            TimeTableEntryTime(tile['end']['hour'], tile['end']['minute'])
        ));
      });

      _timeTable._days.add(dayData);
    });
  }
}

class TimeTableData {
  List<TimeTableDay> _days = [];

  List<TimeTableDay> get days => _days;

  set days(List<TimeTableDay> value) {
    _days = value;
  }
}

class TimeTableDay {
  final List<TimeTableEntry> _entries;
  final String _name;

  TimeTableDay(this._entries, this._name);

  List<TimeTableEntry> get entries => _entries;
  String get name => _name;

}

class TimeTableEntry {
  late String subject;
  late String teacher;
  late String room;
  late String classes;

  late TimeTableEntryTime start;
  late TimeTableEntryTime end;

  TimeTableEntry(this.subject, this.teacher, this.room, this.classes,
      this.start, this.end);
}

class TimeTableEntryTime {
  int hour;
  int minute;

  TimeTableEntryTime(this.hour, this.minute);
}