#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
