import 'package:equatable/equatable.dart';

/// Entité représentant une demande d'amitié.
/// Contient les informations nécessaires pour gérer les demandes d'amitié en attente.
class FriendRequest extends Equatable {
  const FriendRequest({
    required this.friendshipId,
    required this.userId,
    required this.userFirstName,
    required this.userLastName,
    required this.friendId,
    required this.friendFirstName,
    required this.friendLastName,
    required this.status,
    required this.createdAt,
  });

  /// ID de la relation d'amitié
  final String friendshipId;

  /// ID de l'utilisateur qui a envoyé la demande
  final String userId;

  /// Prénom de l'utilisateur qui a envoyé la demande
  final String userFirstName;

  /// Nom de l'utilisateur qui a envoyé la demande
  final String userLastName;

  /// ID de l'utilisateur qui a reçu la demande
  final String friendId;

  /// Prénom de l'utilisateur qui a reçu la demande
  final String friendFirstName;

  /// Nom de l'utilisateur qui a reçu la demande
  final String friendLastName;

  /// Statut de la demande (PENDING, ACCEPTED, REJECTED)
  final String status;

  /// Date de création de la demande
  final String createdAt;

  /// Nom complet de l'utilisateur qui a envoyé la demande
  String get userFullName => '$userFirstName $userLastName'.trim();

  /// Nom complet de l'utilisateur qui a reçu la demande
  String get friendFullName => '$friendFirstName $friendLastName'.trim();

  /// Factory constructor pour créer un [FriendRequest] à partir d'un JSON
  factory FriendRequest.fromJson(Map<String, dynamic> json) {
    // Le backend envoie : userNom (nom de famille), userPrenoms (prénoms)
    // friendNom (nom de famille), friendPrenoms (prénoms)
    return FriendRequest(
      friendshipId: json['friendshipId']?.toString() ?? json['id']?.toString() ?? '',
      userId: json['userId']?.toString() ?? '',
      // userNom = nom de famille (lastName), userPrenoms = prénoms (firstName)
      userFirstName: json['userPrenoms']?.toString() ?? json['userFirstName']?.toString() ?? '',
      userLastName: json['userNom']?.toString() ?? json['userLastName']?.toString() ?? '',
      friendId: json['friendId']?.toString() ?? '',
      // friendNom = nom de famille (lastName), friendPrenoms = prénoms (firstName)
      friendFirstName: json['friendPrenoms']?.toString() ?? json['friendFirstName']?.toString() ?? '',
      friendLastName: json['friendNom']?.toString() ?? json['friendLastName']?.toString() ?? '',
      status: json['status']?.toString() ?? 'PENDING',
      createdAt: json['createdAt']?.toString() ?? json['created_at']?.toString() ?? '',
    );
  }

  @override
  List<Object?> get props => [
        friendshipId,
        userId,
        userFirstName,
        userLastName,
        friendId,
        friendFirstName,
        friendLastName,
        status,
        createdAt,
      ];
}

