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<String> 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<Object?> get props => [
        enableAnnouncements,
        enableTargetSelection,
        showAnnouncementStats,
        defaultReplyPermission,
        enableAnonymousConversations,
        enableGroupConversations,
        allowedConversationTypes,
        maxAttachmentSizeMB,
        messagePageSize,
      ];
}
