/// Entité métier Message v4
///
/// Correspond au DTO backend : MessageResponse
library message;

import 'package:equatable/equatable.dart';

/// Message dans une conversation
class Message extends Equatable {
  final String id;
  final String typeMessage; // TEXTE | VOCAL | IMAGE | SYSTEME
  final String? contenu;
  final String? urlFichier;
  final int? dureeAudio;
  final bool supprime;
  final String? expediteurId;
  final String? expediteurNom;
  final String? expediteurPrenom;
  final String? messageParentId;
  final String? messageParentApercu;
  final DateTime? dateEnvoi;

  const Message({
    required this.id,
    required this.typeMessage,
    this.contenu,
    this.urlFichier,
    this.dureeAudio,
    this.supprime = false,
    this.expediteurId,
    this.expediteurNom,
    this.expediteurPrenom,
    this.messageParentId,
    this.messageParentApercu,
    this.dateEnvoi,
  });

  String get expediteurNomComplet {
    if (expediteurPrenom != null && expediteurNom != null) {
      return '$expediteurPrenom $expediteurNom';
    }
    if (expediteurPrenom != null) return expediteurPrenom!;
    if (expediteurNom != null) return expediteurNom!;
    return '';
  }

  bool get isTexte => typeMessage == 'TEXTE';
  bool get isVocal => typeMessage == 'VOCAL';
  bool get isImage => typeMessage == 'IMAGE';
  bool get isSysteme => typeMessage == 'SYSTEME';
  bool get hasParent => messageParentId != null;

  /// Texte à afficher dans la liste (aperçu)
  String get apercu {
    if (supprime) return '🚫 Message supprimé';
    if (isVocal) return '🎙️ Note vocale${dureeAudio != null ? ' (${dureeAudio}s)' : ''}';
    if (isImage) return '📷 Image';
    if (isSysteme) return contenu ?? '🔔 Notification système';
    return contenu ?? '';
  }

  @override
  List<Object?> get props => [
    id, typeMessage, contenu, urlFichier, dureeAudio, supprime,
    expediteurId, expediteurNom, expediteurPrenom,
    messageParentId, messageParentApercu, dateEnvoi,
  ];
}
