import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; import 'package:fluffychat/pangea/widgets/igc/word_data_card.dart'; class WordData { final String word; final String fullText; final String? userL1; final String? userL2; // final List languageSenses; final String targetPartOfSpeech; final String basePartOfSpeech; final String partOfSpeech; final String targetDefinition; final String baseDefinition; final String targetWord; final String baseWord; final String baseExampleSentence; final String targetExampleSentence; WordData({ // required this.languageSenses, required this.fullText, required this.word, required this.userL1, required this.userL2, required this.baseDefinition, required this.targetDefinition, required this.basePartOfSpeech, required this.targetPartOfSpeech, required this.partOfSpeech, required this.baseWord, required this.targetWord, required this.baseExampleSentence, required this.targetExampleSentence, }); // static const String _languageSensesKey = 'sense_responses'; static const String _dataFullKey = 'data_full'; Map toJson() => { // _languageSensesKey: languageSenses.map((e) => e.toJson()).toList(), ModelKey.word: word, ModelKey.userL1: userL1, ModelKey.userL2: userL2, ModelKey.baseDefinition: baseDefinition, ModelKey.targetDefinition: targetDefinition, ModelKey.basePartOfSpeech: basePartOfSpeech, ModelKey.targetPartOfSpeech: targetPartOfSpeech, ModelKey.partOfSpeech: partOfSpeech, ModelKey.baseWord: baseWord, ModelKey.targetWord: targetWord, ModelKey.baseExampleSentence: baseExampleSentence, ModelKey.targetExampleSentence: targetExampleSentence, }; factory WordData.fromJson( Map json, { required String word, required String fullText, required String userL1, required String userL2, }) { try { return WordData( // languageSenses: (json[_languageSensesKey] as List) // .map( // (e) => LanguageSense.fromJson(e as Map), // ) // .toList() // .cast(), baseDefinition: json[_dataFullKey][ModelKey.baseDefinition], targetDefinition: json[_dataFullKey][ModelKey.targetDefinition], basePartOfSpeech: json[_dataFullKey][ModelKey.basePartOfSpeech], targetPartOfSpeech: json[_dataFullKey][ModelKey.targetPartOfSpeech], partOfSpeech: json[_dataFullKey][ModelKey.partOfSpeech], baseWord: json[_dataFullKey][ModelKey.baseWord], targetWord: json[_dataFullKey][ModelKey.targetWord], baseExampleSentence: json[_dataFullKey][ModelKey.baseExampleSentence], targetExampleSentence: json[_dataFullKey] [ModelKey.targetExampleSentence], word: word, userL1: userL1, userL2: userL2, fullText: fullText, ); } catch (err) { debugger(when: kDebugMode); return [] as WordData; } } bool isMatch({ required String w, required String f, required String? l1, required String? l2, }) => word == w && userL1 == l1 && userL2 == l2 && fullText == f; String formattedPartOfSpeech(LanguageType languageType) { final String pos = languageType == LanguageType.base ? basePartOfSpeech : targetPartOfSpeech; return pos[0].toUpperCase() + pos.substring(1); } // List sensesForLanguage(String code) => // languageSenses.where((langSense) => langSense.langCode == code).toList(); } // class LanguageSense { // List senses; // String langCode; // LanguageSense({ // required this.senses, // required this.langCode, // }); // static const String _sensesKey = "senses"; // static const String _langCodeKey = "lang_code"; // Map toJson() => { // _sensesKey: senses.map((e) => e.toJson()).toList(), // _langCodeKey: langCode, // }; // factory LanguageSense.fromJson(Map json) => LanguageSense( // senses: (json[_sensesKey] as List) // .map( // (e) => Sense.fromJson(e as Map), // ) // .toList() // .cast(), // langCode: json[_langCodeKey], // ); // List get partsOfSpeech => // senses.map((sense) => sense.partOfSpeech).toSet().toList(); // List definitionsForPartOfSpeech(String partOfSpeech) { // final List definitions = []; // for (final Sense sense in senses) { // if (sense.partOfSpeech == partOfSpeech && // sense.definition != null && // sense.definition!.isNotEmpty) { // definitions.add(sense.definition!); // } // } // return definitions; // } // // List partOfSpeechSense(partOfSpeech) { // // return senses // // .where((sense) => sense.partOfSpeech == partOfSpeech) // // .map((sense) => sense.lemmas.join(', ')) // // .toSet() // // .toList(); // // } // // Map> get partOfSpeechSenses { // // final Map> senses = {}; // // for (final partOfSpeech in partsOfSpeech) { // // senses[partOfSpeech] = partOfSpeechSense(partOfSpeech); // // } // // return senses; // // } // } // class Sense { // String partOfSpeech; // List lemmas; // String? definition; // Sense({ // required this.partOfSpeech, // required this.lemmas, // required this.definition, // }); // static const String _posKey = "pos"; // static const String _lemmasKey = "lemmas"; // static const String _definitionKey = "definition"; // Map toJson() => { // _posKey: partOfSpeech, // _lemmasKey: lemmas.toString(), // _definitionKey: definition // }; // factory Sense.fromJson(Map json) => Sense( // partOfSpeech: json[_posKey], // lemmas: (json[_lemmasKey] as List).cast(), // definition: json[_definitionKey], // ); // }