import 'package:equatable/equatable.dart';

/// Entité représentant une suggestion d'ami.
///
/// Cette classe contient toutes les informations nécessaires pour
/// afficher et gérer les suggestions d'amis dans l'application.
class FriendSuggestion extends Equatable {
  const FriendSuggestion({
    required this.userId,
    required this.firstName,
    required this.lastName,
    required this.email,
    required this.profileImageUrl,
    required this.mutualFriendsCount,
    required this.suggestionReason,
  });

  /// ID unique de l'utilisateur suggéré
  final String userId;

  /// Prénom de l'utilisateur suggéré
  final String firstName;

  /// Nom de famille de l'utilisateur suggéré
  final String lastName;

  /// Adresse email de l'utilisateur suggéré
  final String email;

  /// URL de l'image de profil de l'utilisateur suggéré
  final String profileImageUrl;

  /// Nombre d'amis en commun avec cet utilisateur
  final int mutualFriendsCount;

  /// Raison de la suggestion (ex: "3 amis en commun")
  final String suggestionReason;

  /// Nom complet de l'utilisateur suggéré
  String get fullName => '$firstName $lastName'.trim();

  @override
  List<Object?> get props => [
        userId,
        firstName,
        lastName,
        email,
        profileImageUrl,
        mutualFriendsCount,
        suggestionReason,
      ];

  /// Copie de l'entité avec modifications optionnelles
  FriendSuggestion copyWith({
    String? userId,
    String? firstName,
    String? lastName,
    String? email,
    String? profileImageUrl,
    int? mutualFriendsCount,
    String? suggestionReason,
  }) {
    return FriendSuggestion(
      userId: userId ?? this.userId,
      firstName: firstName ?? this.firstName,
      lastName: lastName ?? this.lastName,
      email: email ?? this.email,
      profileImageUrl: profileImageUrl ?? this.profileImageUrl,
      mutualFriendsCount: mutualFriendsCount ?? this.mutualFriendsCount,
      suggestionReason: suggestionReason ?? this.suggestionReason,
    );
  }
}
