// Path: app/src/main/java/de/czyrux/store/core/data/sources/InMemoryCartDataSource.java
// public class InMemoryCartDataSource implements CartDataSource {
// 
//     private final TimeDelayer timeDelayer;
//     private Cart cart;
// 
//     public InMemoryCartDataSource(TimeDelayer timeDelayer) {
//         this.timeDelayer = timeDelayer;
//         this.cart = Cart.EMPTY;
//     }
// 
//     @Override
//     public synchronized Single<Cart> getCart() {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
//             return cart;
//         });
//     }
// 
//     @Override
//     public synchronized Single<Cart> addProduct(CartProduct cartProduct) {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
// 
//             cart = CartBuilder.from(cart)
//                     .addProduct(cartProduct)
//                     .build();
// 
//             return cart;
//         });
//     }
// 
//     @Override
//     public synchronized Single<Cart> removeProduct(CartProduct cartProduct) {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
// 
//             cart = CartBuilder.from(cart)
//                     .removeProduct(cartProduct)
//                     .build();
// 
//             return cart;
//         });
//     }
// 
//     @Override
//     public synchronized Single<Cart> emptyCart() {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
//             cart = Cart.EMPTY;
//             return cart;
//         });
//     }
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/data/sources/InMemoryProductDataSource.java
// public class InMemoryProductDataSource implements ProductDataSource {
// 
//     private final TimeDelayer timeDelayer;
// 
//     public InMemoryProductDataSource(TimeDelayer timeDelayer) {
//         this.timeDelayer = timeDelayer;
//     }
// 
//     @Override
//     public Single<List<Product>> getAllCatalog() {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
//             return ProductProvider.getProductList();
//         });
//     }
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/data/util/TimeDelayer.java
// public class TimeDelayer {
// 
//     private static final int MAX_DEFAULT_DELAY = 2000; // 2 sec
//     private final Random random;
// 
//     public TimeDelayer() {
//         random = new Random(System.nanoTime());
//     }
// 
//     public void delay(int maxTime) {
//         try {
//             Thread.sleep(random.nextInt(maxTime));
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
//     }
// 
//     public void delay() {
//         delay(MAX_DEFAULT_DELAY);
//     }
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/domain/cart/CartDataSource.java
// public interface CartDataSource {
// 
//     Single<Cart> getCart();
// 
//     Single<Cart> addProduct(CartProduct cartProduct);
// 
//     Single<Cart> removeProduct(CartProduct cartProduct);
// 
//     Single<Cart> emptyCart();
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/domain/product/ProductDataSource.java
// public interface ProductDataSource {
//     Single<List<Product>> getAllCatalog();
// }


import de.czyrux.store.core.data.sources.InMemoryCartDataSource;
import de.czyrux.store.core.data.sources.InMemoryProductDataSource;
import de.czyrux.store.core.data.util.TimeDelayer;
import de.czyrux.store.core.domain.cart.CartDataSource;
import de.czyrux.store.core.domain.product.ProductDataSource;
package de.czyrux.store.inject;


public class InMemoryDataDependenciesFactory implements DataDependenciesFactory {

    private final TimeDelayer timeDelayer;

    public InMemoryDataDependenciesFactory() {
        timeDelayer = new TimeDelayer();
    }

// Path: app/src/main/java/de/czyrux/store/core/data/sources/InMemoryCartDataSource.java
// public class InMemoryCartDataSource implements CartDataSource {
// 
//     private final TimeDelayer timeDelayer;
//     private Cart cart;
// 
//     public InMemoryCartDataSource(TimeDelayer timeDelayer) {
//         this.timeDelayer = timeDelayer;
//         this.cart = Cart.EMPTY;
//     }
// 
//     @Override
//     public synchronized Single<Cart> getCart() {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
//             return cart;
//         });
//     }
// 
//     @Override
//     public synchronized Single<Cart> addProduct(CartProduct cartProduct) {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
// 
//             cart = CartBuilder.from(cart)
//                     .addProduct(cartProduct)
//                     .build();
// 
//             return cart;
//         });
//     }
// 
//     @Override
//     public synchronized Single<Cart> removeProduct(CartProduct cartProduct) {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
// 
//             cart = CartBuilder.from(cart)
//                     .removeProduct(cartProduct)
//                     .build();
// 
//             return cart;
//         });
//     }
// 
//     @Override
//     public synchronized Single<Cart> emptyCart() {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
//             cart = Cart.EMPTY;
//             return cart;
//         });
//     }
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/data/sources/InMemoryProductDataSource.java
// public class InMemoryProductDataSource implements ProductDataSource {
// 
//     private final TimeDelayer timeDelayer;
// 
//     public InMemoryProductDataSource(TimeDelayer timeDelayer) {
//         this.timeDelayer = timeDelayer;
//     }
// 
//     @Override
//     public Single<List<Product>> getAllCatalog() {
//         return Single.fromCallable(() -> {
//             timeDelayer.delay();
//             return ProductProvider.getProductList();
//         });
//     }
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/data/util/TimeDelayer.java
// public class TimeDelayer {
// 
//     private static final int MAX_DEFAULT_DELAY = 2000; // 2 sec
//     private final Random random;
// 
//     public TimeDelayer() {
//         random = new Random(System.nanoTime());
//     }
// 
//     public void delay(int maxTime) {
//         try {
//             Thread.sleep(random.nextInt(maxTime));
//         } catch (InterruptedException e) {
//             e.printStackTrace();
//         }
//     }
// 
//     public void delay() {
//         delay(MAX_DEFAULT_DELAY);
//     }
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/domain/cart/CartDataSource.java
// public interface CartDataSource {
// 
//     Single<Cart> getCart();
// 
//     Single<Cart> addProduct(CartProduct cartProduct);
// 
//     Single<Cart> removeProduct(CartProduct cartProduct);
// 
//     Single<Cart> emptyCart();
// }
// 
// Path: app/src/main/java/de/czyrux/store/core/domain/product/ProductDataSource.java
// public interface ProductDataSource {
//     Single<List<Product>> getAllCatalog();
// }


// Path: app/src/main/java/de/czyrux/store/inject/InMemoryDataDependenciesFactory.java
import de.czyrux.store.core.data.sources.InMemoryCartDataSource;
import de.czyrux.store.core.data.sources.InMemoryProductDataSource;
import de.czyrux.store.core.data.util.TimeDelayer;
import de.czyrux.store.core.domain.cart.CartDataSource;
import de.czyrux.store.core.domain.product.ProductDataSource;

package de.czyrux.store.inject;


public class InMemoryDataDependenciesFactory implements DataDependenciesFactory {

    private final TimeDelayer timeDelayer;

    public InMemoryDataDependenciesFactory() {
        timeDelayer = new TimeDelayer();
    }

    @Override