import 'dart:developer'; import 'package:googleapis/privateca/v1.dart'; import 'package:refilc_kreta_api/models/absence.dart'; import 'package:refilc_kreta_api/models/category.dart'; import 'package:refilc_kreta_api/models/lesson.dart'; import 'package:refilc_kreta_api/models/subject.dart'; import 'package:refilc_kreta_api/models/week.dart'; import 'package:refilc_kreta_api/providers/grade_provider.dart'; import 'package:refilc_kreta_api/providers/timetable_provider.dart'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; class ReverseSearch { static Future getLessonByAbsence( Absence absence, BuildContext context) async { final timetableProvider = Provider.of(context, listen: false); List lessons = []; final week = Week.fromDate(absence.date); try { await timetableProvider.fetch(week: week); } catch (e) { log("[ERROR] getLessonByAbsence: $e"); } lessons = timetableProvider.getWeek(week) ?? []; // Find absence lesson in timetable Lesson lesson = lessons.firstWhere( (l) => _sameDate(l.date, absence.date) && l.subject.id == absence.subject.id && l.lessonIndex == absence.lessonIndex.toString(), orElse: () => Lesson.fromJson({'isEmpty': true}), ); if (lesson.isEmpty) { return null; } else { return lesson; } } // difference.inDays is not reliable static bool _sameDate(DateTime a, DateTime b) => (a.year == b.year && a.month == b.month && a.day == b.day); static Future getSubjectByLesson( Lesson lesson, BuildContext context) async { final gradeProvider = Provider.of(context, listen: false); try { await gradeProvider.fetch(); } catch (e) { log("[ERROR] getSubjectByLesson: $e"); } try { return gradeProvider.grades.map((e) => e.subject).firstWhere( (s) => s.id == lesson.subject.id, ); } catch (e) { return null; } } }