//
// Created by Dan Crosby on 1/9/22.
//

#ifndef EAGLE0_AIATTACKERSTRATEGYSELECTOR_HPP
#define EAGLE0_AIATTACKERSTRATEGYSELECTOR_HPP

#include "src/main/cpp/net/eagle0/shardok/ai/AIAttackLocations.hpp"
#include "src/main/cpp/net/eagle0/shardok/ai/AIStrategy.hpp"
#include "src/main/cpp/net/eagle0/shardok/ai/AIWaterCrossingCommandChooser.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 {

using GameState = net::eagle0::shardok::storage::fb::GameState;

class AIAttackerStrategySelector {
public:
    static auto BestAttackerStrategy(
            PlayerId attackerPid,
            const GameState* gameState,
            const CoordsSet& criticalTileCoords,
            const APDCache& apdCache,
            const ALCache& alCache,
            const SettingsGetter& settings,
            const AIWaterCrossingCommandChooser& waterCrossingCommandChooser,
            const vector<CommandProto>& availableCommands) -> AIStrategy;
};

}  // namespace shardok
#endif  // EAGLE0_AIATTACKERSTRATEGYSELECTOR_HPP
