//
//  FireOutActionFactory.hpp
//  eagle0_engine
//
//  Created by Dan Crosby on 1/6/19.
//  Copyright © 2019 none. All rights reserved.
//

#ifndef FireOutActionFactory_hpp
#define FireOutActionFactory_hpp

#include "src/main/cpp/net/eagle0/shardok/library/ShardokAction.hpp"
#include "src/main/cpp/net/eagle0/shardok/library/settings/GameSettings.hpp"
#include "src/main/flatbuffer/net/eagle0/shardok/storage/coords.hpp"
#include "src/main/flatbuffer/net/eagle0/shardok/storage/hex_map.hpp"

namespace shardok {

using Coords = net::eagle0::shardok::storage::fb::Coords;
using HexMap = net::eagle0::shardok::storage::fb::HexMap;
using WeatherFb = net::eagle0::shardok::storage::fb::Weather;

class FireOutActionFactory {
private:
    const SettingsGetter settings;

public:
    explicit FireOutActionFactory(const SettingsGetter &getter);
    virtual ~FireOutActionFactory() = default;

    [[nodiscard]] virtual auto MakeFireOutAction(
            const Coords &coords,
            const Terrain *terrain,
            const WeatherFb *weather) const -> ActionSPtr;

    [[nodiscard]] virtual auto MakeFireOutActions(const HexMap *hexMap, const WeatherFb *weather)
            const -> ActionList;
};
}  // namespace shardok

#endif /* FireOutActionFactory_hpp */
