import 'package:flutter/material.dart'; import 'services/chat_service.dart'; import 'pages/rooms_page.dart'; import 'pages/chat_page.dart'; /// Module de chat autonome avec gestion des rôles /// /// Les permissions sont gérées via le fichier chat_config.yaml class ChatModule { static bool _isInitialized = false; /// Initialiser le module chat avec support des rôles /// /// @param apiUrl URL de base de l'API /// @param userId ID de l'utilisateur connecté /// @param userName Nom de l'utilisateur /// @param userRole Rôle de l'utilisateur (1: membre, 2: admin amicale, 9: superadmin) /// @param userEntite ID de l'entité/amicale de l'utilisateur (optionnel) /// @param authToken Token JWT d'authentification (optionnel) static Future init({ required String apiUrl, required int userId, required String userName, required int userRole, int? userEntite, String? authToken, }) async { // Si déjà initialisé, on ne fait rien (évite les réinitialisations) if (_isInitialized) { debugPrint('ChatModule already initialized, skipping...'); return; } await ChatService.init( apiUrl: apiUrl, userId: userId, userName: userName, userRole: userRole, userEntite: userEntite, authToken: authToken, ); _isInitialized = true; } /// Obtenir la page de liste des conversations static Widget getRoomsPage() => const RoomsPage(); /// Obtenir la page de chat pour une room spécifique static Widget getChatPage(String roomId, String roomTitle) => ChatPage( roomId: roomId, roomTitle: roomTitle, ); /// Naviguer vers le chat depuis n'importe où static void openChat(BuildContext context) { Navigator.of(context).push( MaterialPageRoute( builder: (_) => const RoomsPage(), ), ); } /// Nettoyer les ressources (alias pour cleanup) static void dispose() { cleanup(); } /// Nettoyer les ressources du module chat (à appeler lors du logout) static void cleanup() { if (_isInitialized) { try { ChatService.instance.dispose(); } catch (e) { // Ignorer les erreurs si le service n'est pas initialisé debugPrint('⚠️ Erreur lors du cleanup du chat: $e'); } _isInitialized = false; } } /// Vérifier si le module est initialisé static bool get isInitialized => _isInitialized; }