#ifndef __MODEL_TEXTURED_QUAD_H__
#define __MODEL_TEXTURED_QUAD_H__

#include <string>

#include "ModelShape.h"

namespace Tn {
    
namespace openGLMap {
    
//As it stands right now, this class just provides type-safety
template <typename COORD>
class TexturedQuad : public Shape<COORD>
{
public:
    TexturedQuad(ShapeAttributes const & attributes, COORD lowerLeftCorner, COORD upperRightCorner) : Shape<COORD>(attributes) 
    {
        //Use this or else typedefery to reference template member parameters
        this->m_rawCoords.push_back(lowerLeftCorner);
        this->m_rawCoords.push_back(upperRightCorner);
    }
    TexturedQuad(ShapeAttributes const & attributes, 
                 COORD lowerLeftCorner,  COORD upperLeftCorner,
                 COORD upperRightCorner, COORD lowerRightCorner) : Shape<COORD>(attributes) 
    {
        //Use this or else typedefery to reference template member parameters
        this->m_rawCoords.push_back(lowerLeftCorner);
        this->m_rawCoords.push_back(upperLeftCorner);
        this->m_rawCoords.push_back(upperRightCorner);
        this->m_rawCoords.push_back(lowerRightCorner);
    }
    virtual ~TexturedQuad() {}
    
    eShapeType Type() const { return eShapeType_TEXTURED_QUAD; }
    
private:
    //Do nothing, these should be set at construction and never changed,
    //watch for this container changing in the base class as it is a typedef
    virtual void SetCoordinates(std::deque< COORD > const & coords) {};
    
};

}// namespace openGLMap
    
}// namespace Tn

#endif // __MODEL_TEXTURED_QUAD_H__

