#pragma once

#include "Point.h"
#include "Vector.h"
#include "Matrix.h"

class Rotation
{
public:
    enum class Axis
    {
        X,
        Y,
        Z,
        USER
    };

    Rotation(double angle = 0.0, Axis axis = Axis::Z, const Point& loc = {}, const Vector& customAxis = {});

    const Matrix& getMatrix() const;

    bool isIdentity() const;

    bool isEqual(const Rotation& rotation) const;

    bool operator==(const Rotation& rhs) const
    {
       return isEqual(rhs);
    }

    bool operator!=(const Rotation& rhs) const
    {
      return !operator==(rhs);
    }

private:
    void updateMatrix();

    double mAngle{ 0 };
    Axis mAxis{ Axis::Z };
    Point mPoint;
    Vector mCustomAxis;

    Matrix mMatrix;
};
