#pragma once

#include "abstract_config_node_value.hpp"

namespace hocon {

    class config_node_complex_value : public abstract_config_node_value {
    public:
        config_node_complex_value(shared_node_list children);

        token_list get_tokens() const override;

        shared_node_list const& children() const;

        std::shared_ptr<const config_node_complex_value> indent_text(
                shared_node indentation) const;

        virtual std::shared_ptr<const config_node_complex_value> new_node(
                shared_node_list nodes) const = 0;

    private:
        shared_node_list _children;
    };

}  // namespace hocon