import 'package:flutter/foundation.dart';

/// Service pour gérer les informations globales du chat (badges, stats)
/// Récupère les infos depuis l'API au login et les maintient à jour
class ChatInfoService extends ChangeNotifier {
  static ChatInfoService? _instance;
  static ChatInfoService get instance => _instance ??= ChatInfoService._();
  
  ChatInfoService._();
  
  // Stats du chat
  int _totalRooms = 0;
  int _unreadMessages = 0;
  DateTime? _lastUpdate;
  
  // Getters
  int get totalRooms => _totalRooms;
  int get unreadMessages => _unreadMessages;
  DateTime? get lastUpdate => _lastUpdate;
  bool get hasUnread => _unreadMessages > 0;
  
  /// Met à jour les infos depuis la réponse de login
  /// Attend une structure : { "chat": { "total_rooms": 5, "unread_messages": 12 } }
  void updateFromLogin(Map<String, dynamic> loginData) {
    debugPrint('📊 ChatInfoService: Mise à jour depuis login');
    
    final chatData = loginData['chat'];
    if (chatData != null && chatData is Map<String, dynamic>) {
      _totalRooms = chatData['total_rooms'] ?? 0;
      _unreadMessages = chatData['unread_messages'] ?? 0;
      _lastUpdate = DateTime.now();
      
      debugPrint('💬 Chat stats - Rooms: $_totalRooms, Non lus: $_unreadMessages');
      notifyListeners();
    } else {
      debugPrint('⚠️ Pas de données chat dans la réponse login');
    }
  }
  
  /// Met à jour directement les stats
  void updateStats({int? totalRooms, int? unreadMessages}) {
    bool hasChanged = false;
    
    if (totalRooms != null && totalRooms != _totalRooms) {
      _totalRooms = totalRooms;
      hasChanged = true;
    }
    
    if (unreadMessages != null && unreadMessages != _unreadMessages) {
      _unreadMessages = unreadMessages;
      hasChanged = true;
    }
    
    if (hasChanged) {
      _lastUpdate = DateTime.now();
      notifyListeners();
    }
  }
  
  /// Décrémente le nombre de messages non lus
  void decrementUnread(int count) {
    if (count > 0) {
      _unreadMessages = (_unreadMessages - count).clamp(0, 999);
      _lastUpdate = DateTime.now();
      notifyListeners();
    }
  }
  
  /// Marque tous les messages d'une room comme lus
  void markRoomAsRead(int messagesCount) {
    if (messagesCount > 0) {
      decrementUnread(messagesCount);
    }
  }
  
  /// Incrémente le nombre de messages non lus (nouveau message reçu)
  void incrementUnread(int count) {
    if (count > 0) {
      _unreadMessages = (_unreadMessages + count).clamp(0, 999);
      _lastUpdate = DateTime.now();
      notifyListeners();
    }
  }
  
  /// Réinitialise les stats (au logout)
  void reset() {
    _totalRooms = 0;
    _unreadMessages = 0;
    _lastUpdate = null;
    notifyListeners();
  }
  
  /// Force un refresh des stats depuis l'API
  Future<void> refreshFromApi() async {
    // Cette méthode pourrait appeler directement l'API
    // Pour l'instant on la laisse vide, elle sera utile plus tard
    debugPrint('📊 ChatInfoService: Refresh depuis API demandé');
  }
  
  /// Retourne un label formaté pour le badge
  String get badgeLabel {
    if (_unreadMessages == 0) return '';
    if (_unreadMessages > 99) return '99+';
    return _unreadMessages.toString();
  }
  
  /// Debug info
  @override
  String toString() {
    return 'ChatInfoService(rooms: $_totalRooms, unread: $_unreadMessages, lastUpdate: $_lastUpdate)';
  }
}