//
// Created by Dan Crosby on 8/30/23.
//

#ifndef EAGLE0_AIDEFENDERSTRATEGYSELECTOR_HPP
#define EAGLE0_AIDEFENDERSTRATEGYSELECTOR_HPP

#include "src/main/cpp/net/eagle0/shardok/ai/AIAttackLocations.hpp"
#include "src/main/cpp/net/eagle0/shardok/ai/AICommonTypes.hpp"
#include "src/main/cpp/net/eagle0/shardok/ai/AIStrategy.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/GameStateW.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/action_point_distances/ActionPointDistancesCache.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/map/CoordsSet.hpp"
#include "src/main/flatbuffer/net/eagle0/shardok/storage/game_state.hpp"

namespace shardok {

class AIDefenderStrategySelector {
public:
    static auto BestDefenderStrategy(
            const GameStateW& gameState,
            const CoordsSet& criticalTileCoords,
            int maxRounds,
            const APDCache& apdCache,
            const BattalionTypeGetter& battalionTypeGetter) -> AIStrategy;
};
}  // namespace shardok

#endif  // EAGLE0_AIDEFENDERSTRATEGYSELECTOR_HPP
