#pragma once

#include <string>
#include "warfactory/IDataNode.h"

class WorldData;

class IWorldGenerationStep {
public:
    virtual ~IWorldGenerationStep() = default;

    virtual std::string getStepName() const = 0;

    virtual bool execute(WorldData& world, const IDataNode& config) = 0;

    virtual bool canExecute(const WorldData& world) const = 0;

    virtual float getProgress() const = 0;

    virtual bool isComplete() const = 0;

    virtual void reset() = 0;

    virtual std::string getStepDescription() const = 0;

    virtual float getEstimatedDuration() const = 0;

    virtual std::vector<std::string> getRequiredPreviousSteps() const = 0;

    virtual std::vector<std::string> getProducedData() const = 0;
};