import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; import 'package:fluffychat/pangea/learning_settings/enums/l2_support_enum.dart'; class LanguageModel { final String langCode; final String displayName; final String script; final L2SupportEnum l2Support; LanguageModel({ required this.langCode, required this.displayName, this.script = LanguageKeys.unknownLanguage, this.l2Support = L2SupportEnum.na, }); factory LanguageModel.fromJson(json) { final String code = json['language_code'] ?? codeFromNameOrCode( json['language_name'], json['language_flag'], ); return LanguageModel( langCode: code, displayName: json['language_name'], l2Support: json['l2_support'] != null ? L2SupportEnum.na.fromStorageString(json['l2_support']) : L2SupportEnum.na, script: json['script'] ?? LanguageKeys.unknownLanguage, ); } toJson() => { 'language_code': langCode, 'language_name': displayName, 'script': script, 'l2_support': l2Support.storageString, }; bool get l2 => l2Support != L2SupportEnum.na; // Discuss with Jordan - adding langCode field to language objects as separate from displayName static String codeFromNameOrCode(String codeOrName, [String? url]) { if (codeOrName.isEmpty) return LanguageKeys.unknownLanguage; if (codeOrName == LanguageKeys.unknownLanguage) return codeOrName; if (url == null) return LanguageKeys.unknownLanguage; final List split = url.split('/'); return split.last.split('.').first; } //PTODO - add flag for unknown static LanguageModel get unknown => LanguageModel( langCode: LanguageKeys.unknownLanguage, displayName: "Unknown", ); static LanguageModel multiLingual([BuildContext? context]) => LanguageModel( displayName: context != null ? L10n.of(context).multiLingualSpace : "Multilingual Space", langCode: LanguageKeys.multiLanguage, ); String? getDisplayName(BuildContext context) { return displayName; } String get langCodeShort => langCode.split('-').first; @override bool operator ==(Object other) { if (other is LanguageModel) { return langCode == other.langCode; } return false; } @override int get hashCode => langCode.hashCode; } class LanguageArc { final LanguageModel l1; final LanguageModel l2; LanguageArc({ required this.l1, required this.l2, }); factory LanguageArc.fromJson(Map json) { return LanguageArc( l1: LanguageModel.fromJson(json['l1'] as Map), l2: LanguageModel.fromJson(json['l2'] as Map), ); } Map toJson() { return { 'l1': l1.toJson(), 'l2': l2.toJson(), }; } }