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

#ifndef EAGLE0_SHARDOK_AI_AI_WATER_CROSSING_COMMAND_CHOOSER_HPP
#define EAGLE0_SHARDOK_AI_AI_WATER_CROSSING_COMMAND_CHOOSER_HPP

#include <utility>

#include "src/main/cpp/net/eagle0/shardok/ai/AICommonTypes.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/cpp/net/eagle0/shardok/library/settings/GameSettings.hpp"
#include "src/main/flatbuffer/net/eagle0/shardok/storage/game_state.hpp"

namespace shardok {

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

class AIWaterCrossingCommandChooser {
private:
    const PlayerId playerId;
    const APDCache apdCache;

public:
    AIWaterCrossingCommandChooser(const PlayerId pid, APDCache apdCache)
        : playerId(pid),
          apdCache(std::move(apdCache)) {}

    [[nodiscard]] auto StartCrossingFrom(
            const BattalionTypeGetter &battalionTypeGetter,
            const GameStateW &gameState,
            const CoordsSet &castleCoords) const -> CoordsSet;
};

}  // namespace shardok

#endif  // EAGLE0_SHARDOK_AI_AI_WATER_CROSSING_COMMAND_CHOOSER_HPP
