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 loginData) { debugPrint('📊 ChatInfoService: Mise à jour depuis login'); final chatData = loginData['chat']; if (chatData != null && chatData is Map) { _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 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)'; } }