package org.dicadeveloper.weplantaforest.planting.plantbag;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class SimplePlantBag {
long targetAmountOfTrees;
long actualAmountOfTrees;
long actualPrice;
List<SimplePlantPageItem> plantItems = new ArrayList<>();
protected long getDiffToTargetAmount() {
calcAndSetActualAmountOfTrees();
return targetAmountOfTrees - actualAmountOfTrees;
}
protected boolean containsPlantItem(SimplePlantPageItem plantItemToCheck) {
boolean contains = false;
if (null != getPlantItems()) {
for (SimplePlantPageItem plantPageItem : getPlantItems()) {
if (plantPageItem.getTreeType()
.equals(plantItemToCheck.getTreeType())
&& plantPageItem.getProjectName()
.equals(plantItemToCheck.getProjectName())
&& plantPageItem.getTreePrice() == plantItemToCheck.getTreePrice()) {
contains = true;
}
}
}
return contains;
}
protected void addPlantItem(SimplePlantPageItem plantItem) {
getPlantItems().add(plantItem);
calcAndSetActualAmountOfTrees();
calcAndSetPrice();
}
protected void increaseAmountOfPlantItem(SimplePlantPageItem plantItem, long toIncrease) {
long amountNow = plantItem.getAmount() + toIncrease;
getPlantItem(plantItem).setAmount(amountNow);
calcAndSetActualAmountOfTrees();
calcAndSetPrice();
}
protected SimplePlantPageItem getPlantItem(SimplePlantPageItem plantItemToGet) {
if (null != getPlantItems()) {
for (SimplePlantPageItem plantPageItem : getPlantItems()) {
if (plantPageItem.getTreeType()
.equals(plantItemToGet.getTreeType())
&& plantPageItem.getProjectName()
.equals(plantItemToGet.getProjectName())
&& plantPageItem.getTreePrice() == plantItemToGet.getTreePrice()) {
return plantPageItem;
}
}
}
return null;
}
private void calcAndSetActualAmountOfTrees() {
long actualAmountOfTrees = 0;
for (SimplePlantPageItem plantPageItem : getPlantItems()) {
actualAmountOfTrees += plantPageItem.getAmount();
}
this.actualAmountOfTrees = actualAmountOfTrees;
}
private void calcAndSetPrice() {
long price = 0;
for (SimplePlantPageItem plantPageItem : getPlantItems()) {
price += plantPageItem.getTreePrice() * plantPageItem.getAmount();
}
this.actualPrice = price;
}
@Getter
@Setter
@NoArgsConstructor
public static class SimplePlantPageItem {
String treeType;
long amount;
long treePrice;
String projectName;
String imageFile;
}
}