/*
Use this to implement the vector math functions
https://www.o3de.org/blog/posts/vectors-matrices-matrix-order/
*/

namespace Core
{
    class Vector2
    {
    public:
        float x;
        float y;

        Vector2();
        Vector2(float x, float y);

        Vector2 operator+(Vector2 const& other);
        Vector2 operator-(Vector2 const& other);
        Vector2 operator*(Vector2 const& other);
        Vector2 operator/(Vector2 const& other);
        Vector2& operator+=(Vector2 const& other);
        Vector2& operator-=(Vector2 const& other);
        Vector2& operator*=(Vector2 const& other);
        Vector2& operator/=(Vector2 const& other);
        
        bool operator==(Vector2 const& other);
        bool operator!=(Vector2 const& other);

        Vector2 operator*(float const& scalar);
    };

    class Vector3
    {
    public:
        float x;
        float y;
        float z;
        float w;

        Vector3();
        Vector3(float x, float y, float z);
        Vector3(float x, float y, float z, float w);

        Vector3 operator+(Vector3 const& other);
        Vector3 operator-(Vector3 const& other);
        Vector3 operator*(Vector3 const& other);
        Vector3 operator/(Vector3 const& other);
        Vector3& operator+=(Vector3 const& other);
        Vector3& operator-=(Vector3 const& other);
        Vector3& operator*=(Vector3 const& other);
        Vector3& operator/=(Vector3 const& other);

        bool operator==(Vector3 const& other);
        bool operator!=(Vector3 const& other);

        Vector3 operator*(float const& scalar);
    };

    class Matrix2x2
    {
        //TODO (Eero): Implement
    };

    class Matrix4x4
    {
        //TODO (Eero): Implement
    };

} // namespace Core