#pragma once
#ifndef __CHIPMAKER_H__
#define __CHIPMAKER_H__

#include "cfbmp.h"
#include "CRes.h"
#include "LogFile.h"
#include "memory_map_buffer.h"

class ChipMaker {
public:
	//=====================================
	// コンストラクタ
	//=====================================
	ChipMaker();	//デフォルトコンストラクタ
	virtual ~ChipMaker();	// デストラクタ

private:
	//=====================================
	// メンバ変数
	//=====================================
	CDC* pDCSource;	// ソースとなるビットマップ画像のDC
	CDC* pDCConverted;
	CDC* pDCPalet;
	CRect srcPictureRect;
	CRect cnvPictureRect;
	CRect palPictureRect;
	Cfbmp srcBitmap;
	Cfbmp cnvBitmap;
	Cfbmp palBitmap;
	int convertedChipCount;	// 変換済のチップ数
	BG_DEF_UNIT* bg_map;
	CMap<int,int,int,int> stepCodesMap;	// BGコード番号に対応する足場コード
	CArray<int> stepCodesArrays[256];	// 足場コードに対応するBGコードのリスト

public:
	//=====================================
	// メソッド
	//=====================================
	// 初期化・解放
	CRes Initialize(CDC* pDCSource,CRect& rSrcPictureRect, CDC* pDCConverted, CRect& rCnvPictureRect, CDC* pDCPalet, CRect& rPalPictureRect);	// 初期化
	CRes InitializeConverted();
	CRes Release();						// 解放
	// 読み込み
	CRes LoadSrcBitmap(const char* filename);	// ビットマップ画像を読み込む
	CRes LoadPresetBitmap(const char* filename);	// プリセットパターンのビットマップ画像を読み込む
	CRes ReadStepCSV(const char* filename, CLogFile* pLogFile);
	// 描画
	CRes DoDraw();						// 描画する
	// 変換
	CRes Convert(int offset, bool presetExists, CMap<int, int, int, int>* pPalErrorMap, BOOL checkPaletBlock, CLogFile* pLogFile);	// 変換する
	BG_DEF_UNIT ConvertChip(int x, int y, CMap<int, int, int, int>* pPalErrorMap, BOOL checkPaletBlock, CLogFile* pLog);	// チップを変換
	BG_DEF_UNIT CompareChip(int sx, int sy, int targetBGCode, BOOL checkPaletBlock, CLogFile* pLog);
	// 保存
	CRes SaveFiles(CString bmpFilePath, CString mdtFilePath, CString pworldFilePath, CString csvFilPath, CLogFile* pLogFile);	// 変換結果を保存する
	CRes CreateBGMapImage(CDC* pDC, const char* filename, CMap<int, int, int, int>* pPalErrorMap, CLogFile* pLogFile);
	CRes DrawChipCodeNumber(int px, int py, int meshSizeX, int meshSizeY, Cfbmp* pBmp, RGBQUAD colNormal, RGBQUAD colFirst, CMap<int,int,int,int>* pMap);
	CRes DrawNumber(Cfbmp* pBmp, int x, int y, int number, RGBQUAD& quad);
	CRes CreateSPDefImage(CDC* pDC, const char* filename, CLogFile* pLogFile);
	CRes DrawDefCodeNumber(int code, int px, int py, int meshSizeX, int meshSizeY, Cfbmp* pBmp, RGBQUAD col);
	//
	// 各種情報取得処理
	CString GetSrcBitmapInfo();
	bool IsSrcBitmapReady();
	CString GetCnvBitmapInfo();
};

#endif
