#ifndef RENDERER_H
#define RENDERER_H

#include "client/rendering/wrapper/Shader.h"
#include "client/math/MatrixStack.h"
#include "client/math/Vector.h"
#include "client/math/Quaternion.h"

class Renderer final {
public:
    Renderer(Shader& shader, MatrixStack& stack, Matrix& view);
    
    void pop();
    void push();
    
    Renderer& update();
    Renderer& update(const Vector& pos, const Quaternion& rotation);
    
    Renderer& scale(float sx, float sy, float sz);
    Renderer& scale(float s);

    Renderer& translate(float tx, float ty, float tz);
    Renderer& translateX(float tx);
    Renderer& translateY(float ty);
    Renderer& translateZ(float tz);
    Renderer& translateTo(float tx, float ty, float tz);

    Renderer& rotateX(float degrees);
    Renderer& rotateY(float degrees);
    Renderer& rotateZ(float degrees);

private:
    Shader& shader;
    MatrixStack& stack;
    Matrix& view;
};

#endif