import 'package:equatable/equatable.dart'; import 'chat_message.dart'; /// Entité de domaine représentant une conversation entre deux utilisateurs. /// /// Une conversation regroupe tous les messages échangés entre deux amis. class Conversation extends Equatable { const Conversation({ required this.id, required this.participantId, required this.participantFirstName, required this.participantLastName, required this.participantProfileImageUrl, this.lastMessage, this.lastMessageTimestamp, required this.unreadCount, this.isTyping = false, }); final String id; final String participantId; // L'autre utilisateur final String participantFirstName; final String participantLastName; final String? participantProfileImageUrl; final String? lastMessage; // Contenu du dernier message final DateTime? lastMessageTimestamp; final int unreadCount; // Nombre de messages non lus final bool isTyping; // L'autre utilisateur est en train de taper /// Nom complet du participant. String get participantFullName => '$participantFirstName $participantLastName'; /// Indique si la conversation a des messages non lus. bool get hasUnreadMessages => unreadCount > 0; /// Indique si la conversation a un dernier message. bool get hasLastMessage => lastMessage != null && lastMessageTimestamp != null; @override List get props => [ id, participantId, participantFirstName, participantLastName, participantProfileImageUrl, lastMessage, lastMessageTimestamp, unreadCount, isTyping, ]; /// Crée une copie de cette conversation avec des valeurs modifiées. Conversation copyWith({ String? id, String? participantId, String? participantFirstName, String? participantLastName, String? participantProfileImageUrl, String? lastMessage, DateTime? lastMessageTimestamp, int? unreadCount, bool? isTyping, }) { return Conversation( id: id ?? this.id, participantId: participantId ?? this.participantId, participantFirstName: participantFirstName ?? this.participantFirstName, participantLastName: participantLastName ?? this.participantLastName, participantProfileImageUrl: participantProfileImageUrl ?? this.participantProfileImageUrl, lastMessage: lastMessage ?? this.lastMessage, lastMessageTimestamp: lastMessageTimestamp ?? this.lastMessageTimestamp, unreadCount: unreadCount ?? this.unreadCount, isTyping: isTyping ?? this.isTyping, ); } }