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<void> 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;
}