#pragma once

#include "blitz/Vector.h"
#include <cstdint>

namespace blitz {
namespace render {

static const float eyeHeight = 1.75f;

class Camera {
  private:
	float m_Yaw, m_Pitch;
	Vec3f m_Position;
	Mat4f m_PerspectiveMatrix;
	Vec2i m_LastWindowSize;

  public:
	Camera() : m_Yaw(0), m_Pitch(0), m_Position(0, eyeHeight, 0) {}
	~Camera() {}

	void Update(float delta);

	Mat4f GetViewMatrix() const;

	const Mat4f& GetPerspectiveMatrix() const {
		return m_PerspectiveMatrix;
	}

	const Vec3f& GetPosition() const {
		return m_Position;
	}

	float GetYaw() const {
		return m_Yaw;
	}

	float GetPitch() const {
		return m_Pitch;
	}
};

}  // namespace render
}  // namespace blitz
