#pragma once

#include <quokka_gfx.h>

class MainWindow;
//--------------------------------------------------------------
class Layer
{
  public:
  Layer()                                = delete;      // Default constructor
  virtual ~Layer()                       = default;     // Default destructor
  Layer(const Layer &obj)                = delete;      // Copy constructor
  Layer(Layer &&obj) noexcept            = delete;      // Move constructor
  Layer &operator=(const Layer &obj)     = delete;      // Copy assignment operator
  Layer &operator=(Layer &&obj) noexcept = delete;      // Move assignment operator

  explicit Layer(MainWindow &owner);     // Constructor

  [[nodiscard]] const quokka_gfx::Renderer *GetRenderer() const;     // Get the renderer instance from the main window

  virtual void update(float dt) = 0;     // Update the layer state
  virtual void render() const   = 0;     // Render the layer

  protected:
  MainWindow &m_owner;     // Reference to the main window
};
//--------------------------------------------------------------
