#ifndef _RIVE_TRANSFORM_COMPONENT_HPP_
#define _RIVE_TRANSFORM_COMPONENT_HPP_
#include "rive/generated/transform_component_base.hpp"
#include "rive/math/mat2d.hpp"

namespace rive {
    class Constraint;
    class WorldTransformComponent;
    class TransformComponent : public TransformComponentBase {
    private:
        Mat2D m_Transform;
        float m_RenderOpacity = 0.0f;
        WorldTransformComponent* m_ParentTransformComponent = nullptr;
        std::vector<Constraint*> m_Constraints;

    public:
#ifdef TESTING
        const std::vector<Constraint*>& constraints() const {
            return m_Constraints;
        }
#endif
        StatusCode onAddedClean(CoreContext* context) override;
        void buildDependencies() override;
        void update(ComponentDirt value) override;
        void updateTransform();
        void updateWorldTransform();
        void markTransformDirty();

        /// Opacity inherited by any child of this transform component. This'll
        /// later get overridden by effect layers.
        float childOpacity() override { return m_RenderOpacity; }
        float renderOpacity() const { return m_RenderOpacity; }

        const Mat2D& transform() const;

        /// Explicitly dangerous. Use transform/worldTransform when you don't
        /// need to transform things outside of their hierarchy.
        Mat2D& mutableTransform();

        virtual float x() const = 0;
        virtual float y() const = 0;

        void rotationChanged() override;
        void scaleXChanged() override;
        void scaleYChanged() override;

        void addConstraint(Constraint* constraint);
    };
} // namespace rive

#endif