/// Configuration pour le broker MQTT
///
/// Centralise les paramètres de connexion au broker MQTT

class MqttConfig {
  // Configuration du serveur MQTT
  static const String host = 'mqtt.geosector.fr';
  static const int port = 1883;
  static const int securePort = 8883;
  static const bool useSsl = false;
  
  // Configuration d'authentification
  static const String username = 'geosector_chat';
  static const String password = 'secure_password_here';
  
  // Préfixes des topics MQTT
  static const String topicBase = 'chat';
  static const String topicUserMessages = '$topicBase/user';
  static const String topicAnnouncements = '$topicBase/announcement';
  static const String topicGroups = '$topicBase/groups';
  static const String topicConversations = '$topicBase/conversation';
  
  // Configuration des sessions
  static const int keepAliveInterval = 60;
  static const int reconnectInterval = 5;
  static const bool cleanSession = true;
  
  // Configuration des notifications
  static const int notificationRetryCount = 3;
  static const Duration notificationTimeout = Duration(seconds: 30);
  
  /// Génère un client ID unique pour chaque session
  static String generateClientId(String userId) {
    return 'chat_${userId}_${DateTime.now().millisecondsSinceEpoch}';
  }
  
  /// Retourne l'URL complète du broker selon la configuration SSL
  static String get brokerUrl {
    if (useSsl) {
      return '$host:$securePort';
    } else {
      return '$host:$port';
    }
  }
  
  /// Retourne le topic pour les messages d'un utilisateur
  static String getUserMessageTopic(String userId) {
    return '$topicUserMessages/$userId/messages';
  }
  
  /// Retourne le topic pour les annonces globales
  static String getAnnouncementTopic() {
    return topicAnnouncements;
  }
  
  /// Retourne le topic pour une conversation spécifique
  static String getConversationTopic(String conversationId) {
    return '$topicConversations/$conversationId';
  }
  
  /// Retourne le topic pour un groupe spécifique
  static String getGroupTopic(String groupId) {
    return '$topicGroups/$groupId';
  }
  
  /// Retourne les topics auxquels un utilisateur doit s'abonner
  static List<String> getUserSubscriptionTopics(String userId) {
    return [
      getUserMessageTopic(userId),
      getAnnouncementTopic(),
      // Ajoutez d'autres topics selon les besoins
    ];
  }
}
