#ifndef _RIVE_COMMAND_PATH_HPP_
#define _RIVE_COMMAND_PATH_HPP_

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

namespace rive
{
class RenderPath;

/// Abstract path used to build up commands used for rendering.
class CommandPath : public RefCnt<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
