#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"

#include "cPanel.hpp"

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

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

using UtilityEngine::cString;

namespace GUIEngine {
	class EXPORT_FROM_MYDLL cButton : public cWindow, public VideoEngine::cSprite
	{
	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 Press();

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

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

	private:
		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_