/// Modèle de données Message v4 avec désérialisation JSON
library message_model;

import '../../domain/entities/message.dart';

/// Modèle Message v4
class MessageModel extends Message {
  const MessageModel({
    required super.id,
    required super.typeMessage,
    super.contenu,
    super.urlFichier,
    super.dureeAudio,
    super.supprime,
    super.expediteurId,
    super.expediteurNom,
    super.expediteurPrenom,
    super.messageParentId,
    super.messageParentApercu,
    super.dateEnvoi,
  });

  factory MessageModel.fromJson(Map<String, dynamic> json) {
    return MessageModel(
      id: json['id']?.toString() ?? '',
      typeMessage: json['typeMessage']?.toString() ?? 'TEXTE',
      contenu: json['contenu']?.toString(),
      urlFichier: json['urlFichier']?.toString(),
      dureeAudio: _parseInt(json['dureeAudio']),
      supprime: json['supprime'] == true,
      expediteurId: json['expediteurId']?.toString(),
      expediteurNom: json['expediteurNom']?.toString(),
      expediteurPrenom: json['expediteurPrenom']?.toString(),
      messageParentId: json['messageParentId']?.toString(),
      messageParentApercu: json['messageParentApercu']?.toString(),
      dateEnvoi: json['dateEnvoi'] != null
          ? DateTime.tryParse(json['dateEnvoi'].toString())
          : null,
    );
  }
}

int? _parseInt(dynamic value) {
  if (value == null) return null;
  if (value is int) return value;
  if (value is double) return value.toInt();
  return int.tryParse(value.toString());
}
