//
// Created by Dan Crosby on 4/10/20.
//

#ifndef EAGLE0_CHALLENGEDUELCOMMANDFACTORY_HPP
#define EAGLE0_CHALLENGEDUELCOMMANDFACTORY_HPP

#include <utility>
#include <vector>

#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/map/Coordinates.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/settings/GameSettings.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/unit/Unit.hpp"
#include "src/main/protobuf/net/eagle0/shardok/api/unit_view.pb.h"

namespace shardok {
using std::vector;

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

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

    void AddAvailableChallengeDuelCommands(
            CommandList &existingCommands,
            const Unit *actingUnit,
            const Coords &position,
            ActionPoints remainingActionPoints,
            const HexMap *map,
            const Units *units,
            const vector<PlayerId> &allyPids) const;

    void AddAvailableCommands(CommandList &commands, const CommandParams &params) const override;
};
}  // namespace shardok

#endif  // EAGLE0_CHALLENGEDUELCOMMANDFACTORY_HPP
