//
// Created by Dan Crosby on 3/2/21.
//

#ifndef EAGLE0_HIDECOMMAND_HPP
#define EAGLE0_HIDECOMMAND_HPP

#include "src/main/cpp/net/eagle0/shardok/library/ShardokCommand.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/map/Coordinates.hpp"

namespace shardok {

class HideCommand : public ShardokCommand {
protected:
    [[nodiscard]] auto InternalExecute(
            const GameStateW& currentState,
            const std::shared_ptr<RandomGenerator>& generator) const
            -> vector<ActionResult> override;

    const ActionCost cost;
    const UnitId actorId;
    const Coords target;
    const int agilityXp;
    const int minimumKnowledgeAfter;

public:
    HideCommand(
            const ActionCost& cost,
            PlayerId playerId,
            UnitId actorId,
            Coords target,
            int agilityXp,
            int professionKnowledgeBump);

    [[nodiscard]] auto GetCommandType() const -> CommandType override {
        return net::eagle0::shardok::common::HIDE_COMMAND;
    }

    auto GetCommandProto() const -> CommandProto override;
};

}  // namespace shardok

#endif  // EAGLE0_HIDECOMMAND_HPP
