#ifndef WORLD_TYPE_CREATION_FORM_HPP_
#define WORLD_TYPE_CREATION_FORM_HPP_

#include <memory>

#include <Widget/Layout/CompoundWidget/CompoundWidget.hpp>
#include <WorldTypeSettings/WorldTypeSettings.hpp>

/**
 * @brief Base class for world type creation forms.
 */
class WorldTypeCreationForm : public CompoundWidget
{
public:
    /**
     * @brief Construct the form with the specified child widget.
     */
    WorldTypeCreationForm(Widget *child);

    /**
     * @brief Return the world type settings based on the form values.
     * 
     * If `nullptr` is returned, it means the settings are currently invalid.
     */
    virtual std::shared_ptr<WorldTypeSettings> makeSettings() = 0;

    /**
     * @brief Return true if the form is currently acceptable.
     */
    virtual bool isAcceptable() = 0;
};

#endif