import 'package:dartz/dartz.dart';
import 'package:afterwork/domain/entities/user.dart';
import 'package:afterwork/domain/repositories/user_repository.dart';
import 'package:afterwork/core/errors/failures.dart';

/// Classe qui implémente le cas d'utilisation permettant de récupérer un utilisateur par son ID.
/// Elle interagit avec le dépôt d'utilisateur pour récupérer les données utilisateur.
class GetUser {
  final UserRepository repository; // Référence au dépôt d'utilisateur

  /// Constructeur qui prend en paramètre un dépôt d'utilisateur.
  GetUser(this.repository) {
    print("Initialisation de GetUser avec le UserRepository.");
  }

  /// Méthode pour récupérer un utilisateur par son ID.
  /// Retourne soit un [User], soit une [Failure] en cas d'erreur.
  Future<Either<Failure, User>> call(String id) async {
    print("Appel à GetUser avec l'ID : $id");

    try {
      // Appel au dépôt pour récupérer l'utilisateur
      final user = await repository.getUser(id);
      print("Utilisateur récupéré avec succès : ${user.userId}");
      return Right(user);
    } catch (e) {
      print("Erreur lors de la récupération de l'utilisateur : $e");
      return Left(ServerFailure());
    }
  }
}
