#pragma once
#include "Image.h"
#include "Font.h"
#include "BmpFont.h"
#include "Anime.h"

namespace DXFW
{
///	<summary>カスタマイズした枠のクラス</summary>
///	<example>
///	[サンプルコード:未完成]<BR>
/// サンプル説明<BR>
///	<code>
///	int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )<BR>
///	{<BR>
///		if( !Dx::Initialise() ) return -1;<BR>
///		Dx::End();<BR>
///		return 0;<BR>
/// }<BR>
/// </code>	
/// </example>
class BmpFrame
{
private:
	bool isMake;
	int frameWidth;
	int frameHeight;
	ImagePack *frame;
	Image   *skinn;
public:

	BmpFrame(void){};
	~BmpFrame(void){};
		
	///<summary>フレームを作成する</summary>
	///３×３分割したImagePackを元にフレームを作成
	///内側スキンを省略した場合、外枠の中央を使う
	bool Make( ImagePack &外枠 , Image *内側スキン = nullptr  )
	{
		if( 外枠.GetSize() != 9  ) return false;

		if( 内側スキン == nullptr )
		{
			this->skinn = 外枠[4];
		}else{
			this->skinn = 内側スキン;
		}

		this->frame = &外枠;

		this->isMake = true;

		this->frameWidth = 外枠.GetWidth();
		this->frameHeight = 外枠.GetHeight();

		return true;
	}
	
	///<summary>矩形のフレームを描画</summary>
	///右上座標を指定してフレームを描画する
	bool Draw( int x , int y , int width , int height ) const
	{
		bool isOK = true;

		int xA = x + this->frameWidth;
		int xB = x - this->frameWidth + width;
		int yA = y + this->frameHeight;
		int yB = y - this->frameHeight + height;

		if( !this->skinn->DrawExtend( x+6, y+6 , x+width , y+height ) ) isOK = false;
		
		//まず外枠を描画	
		if( !this->frame[0][3]->DrawExtend( x , yA , xA , yB) ) isOK = false;
		if( !this->frame[0][5]->DrawExtend( xB , yA , xB + this->frameWidth , yB) ) isOK = false;

		if( !this->frame[0][1]->DrawExtend( xA , y ,xB ,yA) ) isOK = false;
		if( !this->frame[0][7]->DrawExtend( xA , yB ,xB ,yB + this->frameHeight) ) isOK = false;
		
		//四隅を描画
		if( !this->frame[0][0]->Draw( x							  , y ) ) isOK = false;
		if( !this->frame[0][2]->Draw( x + width - this->frameWidth, y ) ) isOK = false;
		if( !this->frame[0][6]->Draw( x							  , y + height - this->frameHeight) ) isOK = false;
		if( !this->frame[0][8]->Draw( x + width - this->frameWidth, y + height - this->frameHeight) ) isOK = false;

		return true;
	}
};
}