//
// Created by Dan Crosby on 6/30/20.
//

#ifndef EAGLE0_CONTROLCOMMANDFACTORY_HPP
#define EAGLE0_CONTROLCOMMANDFACTORY_HPP

#include "src/main/cpp/net/eagle0/shardok/library/ShardokCommand.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/command_factories/CommandFactory.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/settings/GameSettings.hpp"

namespace shardok {

class ControlCommandFactory : public CommandFactory {
private:
    const SettingsGetter settings;

public:
    explicit ControlCommandFactory(const SettingsGetter &getter) : settings(getter){};

    void AddAvailableCommands(CommandList &commands, const CommandParams &params) const override;

    auto AddAvailableControlCommands(
            CommandList &existingCommands,
            const Unit *unit,
            ActionPoints remainingActionPoints) const -> void;

    [[nodiscard]] auto IncludeInFollowUps() const -> bool override { return false; }
};

}  // namespace shardok

#endif  // EAGLE0_CONTROLCOMMANDFACTORY_HPP
