package com.softwaremill.common.cdi.autofactory.mixed;
import com.softwaremill.common.cdi.autofactory.*;
import javax.inject.Inject;
import java.util.List;
/**
* @author Adam Warski (adam at warski dot org)
*/
@CreatedWith(TotalPriceCalculator.Factory.class)
public class TotalPriceCalculatorMixedConstructorImpl implements TotalPriceCalculator {
private final List<Product> products;
private final int specialDiscount;
private final PriceCalculator.Factory priceCalculatorFactory;
private final BulkOrderDiscounts bulkOrderDiscounts;
@Inject
public TotalPriceCalculatorMixedConstructorImpl(@FactoryParameter List<Product> products,
@FactoryParameter int specialDiscount,
PriceCalculator.Factory priceCalculatorFactory,
BulkOrderDiscounts bulkOrderDiscounts) {
this.products = products;
this.specialDiscount = specialDiscount;
this.priceCalculatorFactory = priceCalculatorFactory;
this.bulkOrderDiscounts = bulkOrderDiscounts;
}
@Override
public int getTotalPrice() {
int sum = 0;
for (Product product : products) {
sum += priceCalculatorFactory.create(product).getFinalPrice();
}
return sum - specialDiscount - bulkOrderDiscounts.getDiscountForBulkOrderSize(products.size());
}
}