#ifndef _RIVE_MAT2D_HPP_
#define _RIVE_MAT2D_HPP_

#include <cstddef>

namespace rive
{
	class Vec2D;
	class TransformComponents;
	class Mat2D
	{
	private:
		float m_Buffer[6];

	public:
		Mat2D();
		Mat2D(const Mat2D& copy);
		Mat2D(float x1, float y1, float x2, float y2, float tx, float ty);

		inline const float* values() const { return m_Buffer; }

		float& operator[](std::size_t idx) { return m_Buffer[idx]; }
		const float& operator[](std::size_t idx) const { return m_Buffer[idx]; }

		static void identity(Mat2D& result)
		{
			result[0] = 1.0f;
			result[1] = 0.0f;
			result[2] = 0.0f;
			result[3] = 1.0f;
			result[4] = 0.0f;
			result[5] = 0.0f;
		}

		static void fromRotation(Mat2D& result, float rad);
		static void scale(Mat2D& result, const Mat2D& mat, const Vec2D& vec);
		static void multiply(Mat2D& result, const Mat2D& a, const Mat2D& b);
		static bool invert(Mat2D& result, const Mat2D& a);
		static void copy(Mat2D& result, const Mat2D& a);
		static void decompose(TransformComponents& result, const Mat2D& m);
		static void compose(Mat2D& result,
		                    const TransformComponents& components);
		static void scaleByValues(Mat2D& result, float sx, float sy);

		float xx() const { return m_Buffer[0]; }
		float xy() const { return m_Buffer[1]; }
		float yx() const { return m_Buffer[2]; }
		float yy() const { return m_Buffer[3]; }
		float tx() const { return m_Buffer[4]; }
		float ty() const { return m_Buffer[5]; }

		void xx(float value) { m_Buffer[0] = value; }
		void xy(float value) { m_Buffer[1] = value; }
		void yx(float value) { m_Buffer[2] = value; }
		void yy(float value) { m_Buffer[3] = value; }
		void tx(float value) { m_Buffer[4] = value; }
		void ty(float value) { m_Buffer[5] = value; }
	};

	inline Mat2D operator*(const Mat2D& a, const Mat2D& b)
	{
		Mat2D result;
		Mat2D::multiply(result, a, b);
		return result;
	}

	inline bool operator==(const Mat2D& a, const Mat2D& b)
	{
		return a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3] &&
		       a[4] == b[4] && a[5] == b[5];
	}
} // namespace rive
#endif