#ifndef _DRAW_CANVAS_MANAGER_H_
#define _DRAW_CANVAS_MANAGER_H_

#include "RKList.h"

class DrawCanvas;
class RKTransformObject;
class RKVertexDeclaration;
class RKMaterial;
namespace CasualCore
{
  class Level;
}

/// \brief This class manages canvas draw objects and is responsible for creating/destroying them and drawing them.
class DrawCanvasManager
{
public:

  /// \brief Init the drawing manager
  /// \param a_level The level to add the drawing object to (must be valid until Done() is called)
  void Init(CasualCore::Level* a_level);

  /// \brief Uninitialize the object back to the starting state
  void Done();

  /// \brief Create canvas object
  /// \return A new canvas object is returned
  DrawCanvas* CreateCanvas();

  /// \brief Destroy canvas object
  /// \param a_canvas The canvas object to destroy
  void DestroyCanvas(DrawCanvas* a_canvas);

protected:

  friend class DrawCanvasObject;

  RKList<DrawCanvas*> m_canvasArray; //!< Array of draw canvas objects

  CasualCore::Level* m_level = nullptr;        //!< The level the GUI objects are rendered on
  RKTransformObject* m_drawObject = nullptr;   //!< The draw object on the level
  RKVertexDeclaration* m_vertexDecl = nullptr; //!< The vertex format to use in drawing

  /// Draw method to draw each canvas object
  void Draw();

private:
  RKMaterial *m_pSolidMaterial = nullptr;
  RKMaterial *m_pAlphaMaterial = nullptr;
};

#endif //_DRAW_CANVAS_MANAGER_H_
