#pragma once

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

class WorldData;

namespace warfactory {

/**
 * @brief Interface for individual world generation functions
 *
 * Each function represents a specific operation like crater generation,
 * volcanic activity, or meteorite impacts within a broader phase.
 */
class IWorldGenerationFunction {
public:
    virtual ~IWorldGenerationFunction() = default;

    virtual std::string getFunctionName() 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 getFunctionDescription() const = 0;

    virtual float getEstimatedDuration() const = 0;

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

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

    virtual int getFunctionOrder() const = 0;

    virtual std::string getParentPhase() const = 0;
};

} // namespace warfactory