#include "cButton.hpp"

/*** Custom Header Files ***/
#include "GUIHelpers/Enums.hpp"
#include "../VideoEngine/cRenderer.hpp"
#include "../FXEngine/cGFX.hpp"

using GUIEngine::cButton;

using MathEngine::iVector2;
using MathEngine::iVector4;

/*static*/ const cString cButton::sNAME = "button";

cButton::cButton()
{}

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*/ )
{
	Create(parent, id, align, layout, pos, size, padding, name, image);
// 	mp_texture = nullptr;
// 	mp_texturePress = nullptr;
// 
// 	mpp_image = image;
// 
// 	GenerateImage();
}

/*virtual*/ cButton::~cButton()
{
	delete mp_texture;
	mp_texture = nullptr;

	delete mp_texturePress;
	mp_texturePress = nullptr;

}

/// Functions
void cButton::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*/ )
{
	cLayout::Create(parent, id, sORIENTATION, align, layout, pos, size, padding, name);
	
	mp_texture = nullptr;
	mp_texturePress = nullptr;

	mpp_image = image;
}

void cButton::Display()
{
	GenerateImage();

	m_sprite.setPosition(cWindow::getPosition());
	m_sprite.Draw();
	m_sprite.SaveImage("test.bmp", "xml/");
	cWindow::Display();
}

/*virtual*/ void cButton::Press()
{
	mp_texture->SaveImage("hello.bmp");
}

/*virtual*/ void cButton::OnLButtonUp()
{

}

/// Gets
/*virtual*/ const GUIHelpers::eType cButton::getType() const
{
	return GUIHelpers::eType::CBUTTON;
}

const GUIHelpers::RGBA& cButton::getDebugColour() const
{
	return GUIHelpers::ORANGE;
}

/// private
void cButton::GenerateImage()
{
	m_sprite.setImageArea(this->getSize(false));
	GenerateTexture();

	m_sprite.setImage((VideoEngine::cImage**)(&mp_texture));

	m_sprite.setImageArea(mp_texture->getWH());
}

void cButton::GenerateTexture()
{
	GUIHelpers::RGBA colour = { 100, 100, 100, 255 };

	GUIHelpers::Size dim = this->getSize(false);

	SDL_Rect rect = { 0, 0, dim.x + 1, dim.y + 1 };

	SDL_Texture* tmptexture = VideoEngine::cRenderer::Inst().NewTexture(dim.x, dim.y);
	SDL_Texture* tmptexture2 = VideoEngine::cRenderer::Inst().NewTexture(dim.x, dim.y);

	FXEngine::cGFX::Inst().RoundedBox(rect, 20, GUIHelpers::GRAY, tmptexture);
	FXEngine::cGFX::Inst().RoundedBox(rect, 20, colour, tmptexture2);

	mp_texture = new VideoEngine::cImage(tmptexture);
	mp_texturePress = new VideoEngine::cImage(tmptexture2);
}
