import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; class PracticeSelection { final Map> _activityQueue; static const int maxQueueLength = 5; PracticeSelection(this._activityQueue); List activities(ActivityTypeEnum a) => _activityQueue[a] ?? []; PracticeTarget? getTarget(ActivityTypeEnum type) => activities(type).firstOrNull; PracticeTarget? getMorphTarget( PangeaToken t, MorphFeaturesEnum morph, ) => activities(ActivityTypeEnum.morphId).firstWhereOrNull( (entry) => entry.tokens.contains(t) && entry.morphFeature == morph, ); Map toJson() => { 'activityQueue': _activityQueue.map( (key, value) => MapEntry( key.toString(), value.map((e) => e.toJson()).toList(), ), ), }; static PracticeSelection fromJson(Map json) { return PracticeSelection( (json['activityQueue'] as Map).map( (key, value) => MapEntry( ActivityTypeEnum.values.firstWhere((e) => e.toString() == key), (value as List).map((e) => PracticeTarget.fromJson(e)).toList(), ), ), ); } }