#ifndef CAMERA_H
#define CAMERA_H

#include "Component.h"
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>

// A simple Camera component that inherits from Component.
class Camera : public Component {
public:
    Camera();
    virtual ~Camera();

    // Override update (if needed, e.g. for smoothing or input handling).
    virtual void Update(float deltaTime) override;

    // Set the camera's position.
    void SetPosition(const glm::vec3& pos);
    // Set the camera's rotation in degrees.
    void SetRotation(float yaw, float pitch);

    // Get the view matrix calculated from position and rotation.
    glm::mat4 GetViewMatrix() const;
    // Get the projection matrix.
    glm::mat4 GetProjectionMatrix() const;

    // Set perspective projection parameters.
    void SetPerspective(float fov, float aspect, float nearPlane, float farPlane);

    // Getters.
    glm::vec3 GetPosition() const;
    float GetYaw() const;
    float GetPitch() const;

private:
    glm::vec3 position;
    float yaw;
    float pitch;

    // Perspective projection parameters.
    float fov;
    float aspect;
    float nearPlane;
    float farPlane;
};

#endif // CAMERA_H
