fluffychat/lib/pangea/practice_activities/morph_activity_generator.dart
ggurdin 660b92fdf1
refactor: reorganize / simplify practice mode (#4755)
* refactor: reorganize / simplify practice mode

* cleanup

* remove unreferenced code

* only use content words in emoji activities
2025-12-01 13:33:51 -05:00

53 lines
1.8 KiB
Dart

import 'dart:developer';
import 'package:flutter/foundation.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/message_activity_request.dart';
import 'package:fluffychat/pangea/practice_activities/multiple_choice_activity_model.dart';
import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart';
typedef MorphActivitySequence = Map<String, POSActivitySequence>;
typedef POSActivitySequence = List<String>;
class MorphActivityGenerator {
/// Generate a morphological activity for a given token and morphological feature
static MessageActivityResponse get(
MessageActivityRequest req,
) {
debugger(when: kDebugMode && req.targetTokens.length != 1);
debugger(when: kDebugMode && req.targetMorphFeature == null);
final PangeaToken token = req.targetTokens.first;
final MorphFeaturesEnum morphFeature = req.targetMorphFeature!;
final String? morphTag = token.getMorphTag(morphFeature);
if (morphTag == null) {
debugger(when: kDebugMode);
throw "No morph tag found for morph feature";
}
final distractors = token.morphActivityDistractors(morphFeature, morphTag);
distractors.add(morphTag);
debugger(when: kDebugMode && distractors.length < 3);
return MessageActivityResponse(
activity: PracticeActivityModel(
targetTokens: req.targetTokens,
langCode: req.userL2,
activityType: ActivityTypeEnum.morphId,
morphFeature: req.targetMorphFeature,
multipleChoiceContent: MultipleChoiceActivity(
choices: distractors,
answers: {morphTag},
),
),
);
}
}