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

/// Modèle de données pour une suggestion d'ami.
///
/// Cette classe hérite de [FriendSuggestion] et ajoute les fonctionnalités
/// de conversion depuis/vers JSON pour la communication avec l'API.
class FriendSuggestionModel extends FriendSuggestion {
  const FriendSuggestionModel({
    required super.userId,
    required super.firstName,
    required super.lastName,
    required super.email,
    required super.profileImageUrl,
    required super.mutualFriendsCount,
    required super.suggestionReason,
  });

  /// Factory pour créer un [FriendSuggestionModel] depuis un JSON.
  ///
  /// Le backend renvoie :
  /// - userId : UUID de l'utilisateur suggéré
  /// - prenoms : Prénom(s) de l'utilisateur
  /// - nom : Nom de famille de l'utilisateur
  /// - email : Adresse email
  /// - profileImageUrl : URL de l'image de profil
  /// - mutualFriendsCount : Nombre d'amis en commun
  /// - suggestionReason : Raison de la suggestion
  factory FriendSuggestionModel.fromJson(Map<String, dynamic> json) {
    return FriendSuggestionModel(
      userId: json['userId']?.toString() ?? '',
      firstName: json['prenoms']?.toString() ?? json['firstName']?.toString() ?? '',
      lastName: json['nom']?.toString() ?? json['lastName']?.toString() ?? '',
      email: json['email']?.toString() ?? '',
      profileImageUrl: json['profileImageUrl']?.toString() ?? '',
      mutualFriendsCount: (json['mutualFriendsCount'] as num?)?.toInt() ?? 0,
      suggestionReason: json['suggestionReason']?.toString() ?? 'Suggestion',
    );
  }

  /// Convertit le modèle en JSON.
  Map<String, dynamic> toJson() {
    return {
      'userId': userId,
      'prenoms': firstName,
      'nom': lastName,
      'email': email,
      'profileImageUrl': profileImageUrl,
      'mutualFriendsCount': mutualFriendsCount,
      'suggestionReason': suggestionReason,
    };
  }

  /// Convertit le modèle en entité de domaine.
  FriendSuggestion toEntity() {
    return FriendSuggestion(
      userId: userId,
      firstName: firstName,
      lastName: lastName,
      email: email,
      profileImageUrl: profileImageUrl,
      mutualFriendsCount: mutualFriendsCount,
      suggestionReason: suggestionReason,
    );
  }

  /// Factory pour créer un [FriendSuggestionModel] depuis une entité.
  factory FriendSuggestionModel.fromEntity(FriendSuggestion entity) {
    return FriendSuggestionModel(
      userId: entity.userId,
      firstName: entity.firstName,
      lastName: entity.lastName,
      email: entity.email,
      profileImageUrl: entity.profileImageUrl,
      mutualFriendsCount: entity.mutualFriendsCount,
      suggestionReason: entity.suggestionReason,
    );
  }
}
