package games.strategy.triplea.ai.proAI.data;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.data.Resource;
import games.strategy.triplea.Constants;
import games.strategy.util.IntegerMap;
public class ProResourceTracker {
private final IntegerMap<Resource> resources;
private IntegerMap<Resource> tempPurchases;
public ProResourceTracker(final PlayerID player) {
resources = player.getResources().getResourcesCopy();
tempPurchases = new IntegerMap<>();
}
public boolean hasEnough(final ProPurchaseOption ppo) {
return getRemaining().greaterThanOrEqualTo(ppo.getCosts());
}
public void purchase(final ProPurchaseOption ppo) {
resources.subtract(ppo.getCosts());
}
public void removePurchase(final ProPurchaseOption ppo) {
if (ppo != null) {
resources.add(ppo.getCosts());
}
}
public void tempPurchase(final ProPurchaseOption ppo) {
tempPurchases.add(ppo.getCosts());
}
public void removeTempPurchase(final ProPurchaseOption ppo) {
if (ppo != null) {
tempPurchases.subtract(ppo.getCosts());
}
}
public void confirmTempPurchases() {
resources.subtract(tempPurchases);
clearTempPurchases();
}
public void clearTempPurchases() {
tempPurchases = new IntegerMap<>();
}
public boolean isEmpty() {
return getRemaining().allValuesEqual(0);
}
public int getTempPUs(final GameData data) {
final Resource PUs = data.getResourceList().getResource(Constants.PUS);
return tempPurchases.getInt(PUs);
}
@Override
public String toString() {
return getRemaining().toString();
}
private IntegerMap<Resource> getRemaining() {
final IntegerMap<Resource> combinedResources = new IntegerMap<>(resources);
combinedResources.subtract(tempPurchases);
return combinedResources;
}
}