#ifndef _RIVE_COMMAND_PATH_HPP_
#define _RIVE_COMMAND_PATH_HPP_

#include "rive/math/mat2d.hpp"
#include "rive/math/path_types.hpp"

namespace rive
{
class RenderPath;

/// Abstract path used to build up commands used for rendering.
class CommandPath
{
public:
    virtual ~CommandPath() {}
    virtual void rewind() = 0;
    virtual void fillRule(FillRule value) = 0;
    virtual void addPath(CommandPath* path, const Mat2D& transform) = 0;

    virtual void moveTo(float x, float y) = 0;
    virtual void lineTo(float x, float y) = 0;
    virtual void cubicTo(float ox, float oy, float ix, float iy, float x, float y) = 0;
    virtual void close() = 0;

    virtual RenderPath* renderPath() = 0;

    // non-virtual helpers

    void addRect(float x, float y, float width, float height)
    {
        moveTo(x, y);
        lineTo(x + width, y);
        lineTo(x + width, y + height);
        lineTo(x, y + height);
        close();
    }

    void move(Vec2D v) { this->moveTo(v.x, v.y); }
    void line(Vec2D v) { this->lineTo(v.x, v.y); }
    void cubic(Vec2D a, Vec2D b, Vec2D c) { this->cubicTo(a.x, a.y, b.x, b.y, c.x, c.y); }
};
} // namespace rive
#endif
