#ifndef GRAPHICPRIMITIVE_H
#define GRAPHICPRIMITIVE_H

#include <stdint.h>

#include "SDL.h"
#include "sge.h"

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

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

  const string & getShapeType ();
  void setShapeType (const string &);
  
  uint8_t getColorR();
  uint8_t getColorG();
  uint8_t getColorB();
  uint8_t getAlpha();
  
  void setColorR (uint8_t);
  void setColorG (uint8_t);
  void setColorB (uint8_t);
  void setAlpha (uint8_t);

  bool getFilled ();
  bool getAntiAliased ();

  void setFilled (bool);
  void setAntiAliased (bool);

  vector <int16_t> & getXCoords();
  void pushXCoord(int16_t);
  void fillXCoords(vector<int>&);

  vector <int16_t> & getYCoords();
  void pushYCoord(int16_t);
  void fillYCoords(vector<int>&);

  vector <int16_t> & getOtherShapeData();
  void pushOtherShapeData(int16_t);
  void fillOtherShapeData(vector<int>&);

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

 private:
  uint32_t refCount;

  string shapeType;

  uint8_t colorR;
  uint8_t colorG;
  uint8_t colorB;

  uint8_t alphaChannel;

  bool filled;
  bool antiAliased;

  vector <int16_t> xCoords;
  vector <int16_t> yCoords;
  vector <int16_t> otherShapeData;
};

#endif
