#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
