import '../models/message.dart'; import '../repositories/message_repository.dart'; import 'error_service.dart'; class MessageService { final MessageRepository _messageRepository; final ErrorService _errorService; MessageService({ required MessageRepository messageRepository, ErrorService? errorService, }) : _messageRepository = messageRepository, _errorService = errorService ?? ErrorService(); // Envoyer un message Future sendMessage({ required String groupId, required String text, required String senderId, required String senderName, }) async { try { if (text.trim().isEmpty) { throw Exception('Le message ne peut pas être vide'); } await _messageRepository.sendMessage( groupId: groupId, text: text.trim(), senderId: senderId, senderName: senderName, ); } catch (e, stackTrace) { _errorService.logError( 'message_service.dart', 'Erreur lors de l\'envoi du message: $e', stackTrace, ); throw Exception('Impossible d\'envoyer le message'); } } // Stream des messages Stream> getMessagesStream(String groupId) { try { return _messageRepository.getMessagesStream(groupId); } catch (e, stackTrace) { _errorService.logError( 'message_service.dart', 'Erreur lors de la récupération des messages: $e', stackTrace, ); throw Exception('Impossible de récupérer les messages'); } } // Supprimer un message Future deleteMessage({ required String groupId, required String messageId, }) async { try { await _messageRepository.deleteMessage( groupId: groupId, messageId: messageId, ); } catch (e, stackTrace) { _errorService.logError( 'message_service.dart', 'Erreur lors de la suppression du message: $e', stackTrace, ); throw Exception('Impossible de supprimer le message'); } } // Modifier un message Future updateMessage({ required String groupId, required String messageId, required String newText, }) async { try { if (newText.trim().isEmpty) { throw Exception('Le message ne peut pas être vide'); } await _messageRepository.updateMessage( groupId: groupId, messageId: messageId, newText: newText.trim(), ); } catch (e, stackTrace) { _errorService.logError( 'message_service.dart', 'Erreur lors de la modification du message: $e', stackTrace, ); throw Exception('Impossible de modifier le message'); } } // Ajouter une réaction Future reactToMessage({ required String groupId, required String messageId, required String userId, required String reaction, }) async { try { await _messageRepository.reactToMessage( groupId: groupId, messageId: messageId, userId: userId, reaction: reaction, ); } catch (e, stackTrace) { _errorService.logError( 'message_service.dart', 'Erreur lors de l\'ajout de la réaction: $e', stackTrace, ); throw Exception('Impossible d\'ajouter la réaction'); } } // Supprimer une réaction Future removeReaction({ required String groupId, required String messageId, required String userId, }) async { try { await _messageRepository.removeReaction( groupId: groupId, messageId: messageId, userId: userId, ); } catch (e, stackTrace) { _errorService.logError( 'message_service.dart', 'Erreur lors de la suppression de la réaction: $e', stackTrace, ); throw Exception('Impossible de supprimer la réaction'); } } }