import 'package:equatable/equatable.dart'; /// Configuration du module chat /// /// Permet d'adapter le comportement du chat selon l'application /// (Geosector ou Resalice) class ChatConfig with EquatableMixin { /// Active/désactive les annonces final bool enableAnnouncements; /// Active/désactive la sélection de cibles pour les annonces final bool enableTargetSelection; /// Active/désactive les statistiques des annonces final bool showAnnouncementStats; /// Permission de réponse par défaut final String defaultReplyPermission; /// Active/désactive les conversations anonymes final bool enableAnonymousConversations; /// Active/désactive les conversations de groupe final bool enableGroupConversations; /// Types de conversation autorisés final List allowedConversationTypes; /// Taille maximale des fichiers en Mo final int maxAttachmentSizeMB; /// Nombre de messages par page final int messagePageSize; ChatConfig({ this.enableAnnouncements = true, this.enableTargetSelection = true, this.showAnnouncementStats = true, this.defaultReplyPermission = 'none', this.enableAnonymousConversations = false, this.enableGroupConversations = true, this.allowedConversationTypes = const [ 'one_to_one', 'group', 'announcement', 'broadcast' ], this.maxAttachmentSizeMB = 10, this.messagePageSize = 50, }); /// Configuration par défaut pour Geosector factory ChatConfig.geosector() { return ChatConfig( enableAnnouncements: true, enableTargetSelection: true, showAnnouncementStats: true, defaultReplyPermission: 'none', enableAnonymousConversations: false, enableGroupConversations: true, allowedConversationTypes: const [ 'one_to_one', 'group', 'announcement', 'broadcast' ], ); } /// Configuration par défaut pour Resalice factory ChatConfig.resalice() { return ChatConfig( enableAnnouncements: false, enableTargetSelection: false, showAnnouncementStats: false, defaultReplyPermission: 'all', enableAnonymousConversations: true, enableGroupConversations: false, allowedConversationTypes: const [ 'one_to_one', 'anonymous' ], ); } /// Vérifie si un type de conversation est autorisé bool isConversationTypeAllowed(String type) { return allowedConversationTypes.contains(type); } @override List get props => [ enableAnnouncements, enableTargetSelection, showAnnouncementStats, defaultReplyPermission, enableAnonymousConversations, enableGroupConversations, allowedConversationTypes, maxAttachmentSizeMB, messagePageSize, ]; }