#ifndef _CBUTTON_HPP_
#define _CBUTTON_HPP_

/*** SDL Header Files ***/
#include <SDL.h>    

/*** Custom Header Files ***/
#include "cWindow.hpp"

#include "GUIHelpers/Enums.hpp"
#include "GUIHelpers/GUIUtility.hpp"
#include "../VideoEngine/cSprite.hpp"
#include "../VideoEngine/cImage.hpp"
#include "../MathEngine/iVector/iVector2.hpp"

/*** DLL Header File ***/
#include "dllExport.h"

/*** Custom Header Files ***/
#include "cLayout.hpp"
#include "../UtilityEngine/cString.hpp"
#include "../EventEngine/cEvent.hpp"

using UtilityEngine::cString;

namespace GUIEngine {
	class EXPORT_FROM_MYDLL cButton : public cLayout, public EventEngine::cEvent
	{
	public:
		static const cString sNAME; /*= "button";*/

		cButton();
		cButton( cWindow* parent, const signed int id, const GUIHelpers::eAlign& align = sALIGN, const GUIHelpers::eLayout& layout = sLAYOUT,
			const GUIHelpers::Position& pos = sPOSITION, const GUIHelpers::Size& size = sSIZE, const GUIHelpers::Padding& padding = sPADDING, 
			const cString& name = sNAME, VideoEngine::cImage** image = nullptr );
		virtual ~cButton();

		/// Functions
		void Create( cWindow* parent, const signed int id, const GUIHelpers::eAlign& align = sALIGN, const GUIHelpers::eLayout& layout = sLAYOUT, 
			const GUIHelpers::Position& pos = sPOSITION, const GUIHelpers::Size& size = sSIZE, const GUIHelpers::Padding& padding = sPADDING, 
			const cString& name = sNAME, VideoEngine::cImage** image = nullptr );

		virtual void Display();

		virtual void Press();

		virtual void OnLButtonUp();

		/// Sets
			
		/// Gets
		virtual const GUIHelpers::eType getType() const;
		virtual const GUIHelpers::RGBA& getDebugColour() const;

	private:
		void CreateLabel();
		void GenerateImage();
		void GenerateTexture();

	private:
		/// Variables
		VideoEngine::cSprite m_sprite;

		VideoEngine::cImage* mp_texture;/// = nullptr
		VideoEngine::cImage* mp_texturePress;/// = nullptr
		
		/// Pointer to the image that will be displayed on the button.
		VideoEngine::cImage** mpp_image;/// = nullptr
	};/// END CLASS DEFINITION cButton
}/// END NAMESPACE DEFINITION GUIEngine
#endif/// END IFNDEF _CBUTTON_HPP_