#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 reset() = 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
