#ifndef GRAPHICFRAME_H
#define GRAPHICFRAME_H

#include <stdint.h>

#include "SDL.h"

#include "AffineTransformationMatrix.h"

#include <vector>
#include <string>
using namespace std;

#define GRAPHIC_PRIMITIVE 0
#define GRAPHIC_BITMAP 1

class GraphicFrame
{
 public:
  GraphicFrame ();
  ~GraphicFrame ();

  void incRefCount ();
  void decRefCount ();
  uint32_t getRefCount ();

  bool addReference (const string & type, const string & name, const AffineTransformationMatrix & atm);
  bool getReference(uint8_t index, string & type, string & name, AffineTransformationMatrix & atm);

  vector<string> & getGraphicPrimitiveList ();
  vector<string> & getGraphicBitmapList ();
  int getNumberOfElements ();
 private:
  uint32_t refCount;

  //1 vector of strings for all the graphic primitivives.
  //2 vector of strings for all the graphic bitmaps.
  //3 vector of x positions
  //4 vector of y positions
  //5 vector of which object to draw next.
  //An AffineTransformationMatrix for positioning and effects.

  vector <string> primList;
  vector <string> bitmapList;
  vector <uint8_t> nextObjectToDraw;
  vector <AffineTransformationMatrix> atms;
};

#endif
