#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
