package games.strategy.triplea.ai.proAI.data;
import java.util.ArrayList;
import java.util.List;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.data.Territory;
import games.strategy.triplea.Properties;
import games.strategy.triplea.ai.proAI.util.ProMatches;
import games.strategy.triplea.delegate.Matches;
public class ProPurchaseTerritory {
private Territory territory;
private int unitProduction;
private List<ProPlaceTerritory> canPlaceTerritories;
public ProPurchaseTerritory(final Territory territory, final GameData data, final PlayerID player,
final int unitProduction) {
this.territory = territory;
this.unitProduction = unitProduction;
canPlaceTerritories = new ArrayList<>();
canPlaceTerritories.add(new ProPlaceTerritory(territory));
if (ProMatches.territoryHasInfraFactoryAndIsNotConqueredOwnedLand(player, data).match(territory)) {
for (final Territory t : data.getMap().getNeighbors(territory, Matches.TerritoryIsWater)) {
if (Properties.getWW2V2(data) || Properties.getUnitPlacementInEnemySeas(data)
|| !t.getUnits().someMatch(Matches.enemyUnit(player, data))) {
canPlaceTerritories.add(new ProPlaceTerritory(t));
}
}
}
}
public int getRemainingUnitProduction() {
int remainingUnitProduction = unitProduction;
for (final ProPlaceTerritory ppt : canPlaceTerritories) {
remainingUnitProduction -= ppt.getPlaceUnits().size();
}
return remainingUnitProduction;
}
public Territory getTerritory() {
return territory;
}
@Override
public String toString() {
return territory + " | unitProduction=" + unitProduction + " | placeTerritories=" + canPlaceTerritories;
}
public void setTerritory(final Territory territory) {
this.territory = territory;
}
public int getUnitProduction() {
return unitProduction;
}
public void setUnitProduction(final int unitProduction) {
this.unitProduction = unitProduction;
}
public List<ProPlaceTerritory> getCanPlaceTerritories() {
return canPlaceTerritories;
}
public void setCanPlaceTerritories(final List<ProPlaceTerritory> canPlaceTerritories) {
this.canPlaceTerritories = canPlaceTerritories;
}
}