package games.strategy.triplea.delegate.remote;

import games.strategy.engine.data.Territory;
import games.strategy.engine.delegate.IDelegate;
import games.strategy.engine.message.IRemote;
import games.strategy.triplea.delegate.IBattle;
import games.strategy.triplea.delegate.IBattle.BattleType;
import games.strategy.triplea.delegate.dataObjects.BattleListing;

public interface IBattleDelegate extends IRemote, IDelegate {
  /**
   * @return The battles currently waiting to be fought.
   */
  BattleListing getBattles();

  /**
   * Fight the battle in the given country.
   *
   * @param where
   *        - where to fight
   * @param bombing
   *        - fight a bombing raid
   * @return an error string if the battle could not be fought or an error occurred, null otherwise
   */
  String fightBattle(Territory where, boolean bombing, BattleType type);

  /**
   * Finish the current battle.
   *
   * @return an error string if the battle could not be fought or an error occurred, null otherwise
   */
  String fightCurrentBattle();

  /**
   * @return The location of the currently being fought battle, or null if no battle is in progress.
   */
  Territory getCurrentBattleTerritory();

  /**
   * @return The current battle if there is one, or null if there is no current battle in progress.
   */
  IBattle getCurrentBattle();
}
