import 'package:get_it/get_it.dart';
import 'package:http/http.dart' as http;

import '../../data/datasources/user_remote_data_source.dart';
import '../../data/repositories/user_repository_impl.dart';
import '../../domain/usecases/get_user.dart';

/// Instance globale pour gérer l'injection des dépendances via GetIt
final sl = GetIt.instance;

/// Fonction d'initialisation pour enregistrer toutes les dépendances.
/// Utilisée pour fournir des services, des data sources, des repositories et des use cases.
void init() {
  // Log de démarrage de l'injection des dépendances
  print("Démarrage de l'initialisation des dépendances.");

  // Register Http Client
  sl.registerLazySingleton(() => http.Client());
  print("Client HTTP enregistré.");

  // Register Data Sources
  sl.registerLazySingleton(() => UserRemoteDataSource(sl()));
  print("DataSource pour UserRemoteDataSource enregistré.");

  // Register Repositories
  sl.registerLazySingleton(() => UserRepositoryImpl(remoteDataSource: sl()));
  print("Repository pour UserRepositoryImpl enregistré.");

  // Register Use Cases
  sl.registerLazySingleton(() => GetUser(sl()));
  print("UseCase pour GetUser enregistré.");

  // Log de fin d'initialisation des dépendances
  print("Initialisation des dépendances terminée.");
}
