#ifndef _RIVE_COMMAND_PATH_HPP_
#define _RIVE_COMMAND_PATH_HPP_

#include "rive/math/mat2d.hpp"

namespace rive {
    enum class FillRule { nonZero, evenOdd };

    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
