class EventModel {
  final String id;
  final String title;
  final String description;
  final String startDate;
  final String location;
  final String category;
  final String link;
  final String? imageUrl;
  final String creatorEmail;
  final String creatorFirstName;  // Prénom du créateur
  final String creatorLastName;   // Nom du créateur
  final String profileImageUrl;
  final List<dynamic> participants;
  String status;
  final int reactionsCount;
  final int commentsCount;
  final int sharesCount;

  EventModel({
    required this.id,
    required this.title,
    required this.description,
    required this.startDate,
    required this.location,
    required this.category,
    required this.link,
    this.imageUrl,
    required this.creatorEmail,
    required this.creatorFirstName,
    required this.creatorLastName,
    required this.profileImageUrl,
    required this.participants,
    required this.status,
    required this.reactionsCount,
    required this.commentsCount,
    required this.sharesCount,
  });

  factory EventModel.fromJson(Map<String, dynamic> json) {
    print('[LOG] Création de l\'EventModel depuis JSON');

    // Utiliser les valeurs par défaut si une clé est absente
    final String id = json['id'] ?? 'ID Inconnu';
    final String title = json['title'] ?? 'Titre Inconnu';
    final String description = json['description'] ?? 'Description Inconnue';
    final String startDate = json['startDate'] ?? 'Date de début Inconnue';
    final String location = json['location'] ?? 'Localisation Inconnue';
    final String category = json['category'] ?? 'Catégorie Inconnue';
    final String link = json['link'] ?? 'Lien Inconnu';
    final String? imageUrl = json['imageUrl'];
    final String creatorEmail = json['creatorEmail'] ?? 'Email Inconnu';
    final String creatorFirstName = json['creatorFirstName'];  // Ajout du prénom
    final String creatorLastName = json['creatorLastName'];    // Ajout du nom
    final String profileImageUrl = json['profileImageUrl'];    // Ajout du nom
    final List<dynamic> participants = json['participants'] ?? [];
    String status = json['status'] ?? 'ouvert';
    final int reactionsCount = json['reactionsCount'] ?? 0;
    final int commentsCount = json['commentsCount'] ?? 0;
    final int sharesCount = json['sharesCount'] ?? 0;

    print('[LOG] Champs extraits depuis JSON :');
    print('  - ID: $id');
    print('  - Titre: $title');
    print('  - Description: $description');
    print('  - Date de début: $startDate');
    print('  - Localisation: $location');
    print('  - Catégorie: $category');
    print('  - Lien: $link');
    print('  - URL de l\'image: ${imageUrl ?? "Aucune"}');
    print('  - Email du créateur: $creatorEmail');
    print('  - Prénom du créateur: $creatorFirstName');
    print('  - Nom du créateur: $creatorLastName');
    print('  - Image de profile du créateur: $profileImageUrl');
    print('  - Participants: ${participants.length} participants');
    print('  - Statut: $status');
    print('  - Nombre de réactions: $reactionsCount');
    print('  - Nombre de commentaires: $commentsCount');
    print('  - Nombre de partages: $sharesCount');

    return EventModel(
      id: id,
      title: title,
      description: description,
      startDate: startDate,
      location: location,
      category: category,
      link: link,
      imageUrl: imageUrl,
      creatorEmail: creatorEmail,
      creatorFirstName: creatorFirstName,  // Ajout du prénom
      creatorLastName: creatorLastName,    // Ajout du nom
      profileImageUrl: profileImageUrl,
      participants: participants,
      status: status,
      reactionsCount: reactionsCount,
      commentsCount: commentsCount,
      sharesCount: sharesCount,
    );
  }

  Map<String, dynamic> toJson() {
    print('[LOG] Conversion de EventModel en JSON');
    return {
      'id': id,
      'title': title,
      'description': description,
      'startDate': startDate,
      'location': location,
      'category': category,
      'link': link,
      'imageUrl': imageUrl,
      'creatorEmail': creatorEmail,
      'creatorFirstName': creatorFirstName,  // Ajout du prénom
      'creatorLastName': creatorLastName,    // Ajout du nom
      'profileImageUrl': profileImageUrl,
      'participants': participants,
      'status': status,
      'reactionsCount': reactionsCount,
      'commentsCount': commentsCount,
      'sharesCount': sharesCount,
    };
  }
}
