#pragma once

#include "MaterialNode.h"

class GeometryNode : public MaterialNode
{
public:
    enum class Type
    {
        Path,
        Rectangle,
        Circle,
        Arc,
        Line,
        Polyline
    };

public:
    GeometryNode(const DiscretePoint& location);
    virtual ~GeometryNode() = default;

    virtual Type getType() = 0;

    unsigned getStrokeThickness() const;
    void setStrokeThickness(unsigned thickness);

protected:
    unsigned mStrokeThickness{0};
    Type mType;

    bool mGeometryIsDirty{true};
};

class LineNode : public GeometryNode
{
public:
    LineNode(const DiscretePoint& location)
    :    GeometryNode(location)
    {

    }

    Type getType()
    {
        return Type::Line;
    }
};

using GeometryNodePtr = std::unique_ptr<GeometryNode>;
