//
// CSVEntry
//
#ifndef __CSVENTRY_H__
#define __CSVENTRY_H__

#include "CRes.h"

// コマンド一覧
#define CSVCMD_NOP				"Nop"			// 何もしない
#define CSVCMD_ERROR			"Error"			// エラー
#define CSVCMD_COMMENT			"Comment"		// コメント
#define CSVCMD_READ_PALET		"ReadPalet"		// パレット読み込み
#define CSVCMD_READ_SP			"ReadSp"		// SP読み込み
#define CSVCMD_READ_BMP_PAL		"ReadBmpPal"	// PAL読み込み
#define CSVCMD_READ_BMP_SP		"ReadBmpSp"		// SP読み込み
#define CSVCMD_SAVE_SP_PAL		"SaveSpPal"		// SP, PAL保存
#define CSVCMD_SAVE_BMP_CNV		"SaveBmpCnv"	// BMP変換保存
#define CSVCMD_SAVE_BMP_CNV256	"SaveBmpCnv256"	// BMP変換保存256色
#define CSVCMD_SAVE_BMP_FUL		"SaveBmpFul"	// フルカラーBMP保存
#define CSVCMD_SET_BASEPATH		"SetBasePath"	// ベースパスを設定

#define RESERVED_EMPTY			"(null)"	// 予約語：空文字列を示す

/// <summary>
/// CSVデータの内容
/// </summary>
class CsvEntry {
public:
	CsvEntry();				// コンストラクタ
	CsvEntry(const char* command);	// コンストラクタ
	CsvEntry(const CsvEntry& entry);	// コピーコンストラクタ
	virtual ~CsvEntry();	// デストラクタ
	CsvEntry& operator=(const CsvEntry& entry);

public:
	// コマンド
	CString command;

	// 引数
	CStringArray params;
	CStringArray paramsOrig;

public:
	// CSVの行を文字列として取得する
	CString GetCsvLine();
	void AddParam(CString param, bool trim);
	void AddParam(const char* param, bool trim);
	void AddParam(int param);
	void AddParamBool(BOOL param);
	// ベースパス調整
	void AdjustBasePath(const char* basePath);
	CString AdjustBasePathCore(const char* basePath, const char* value);

	// パラメータを各型で取り込む
	int GetParamInt(int index);
	int GetParamHex(int index);
	CString GetParamStr(int index);
	BOOL GetParamBool(int index);

	// ヘルパー
	static CsvEntry FromString(CString line);
	static CRes FromFile(CString filename, CArray<CsvEntry>& target);
	static CRes FromCsvText(CString csvText, CArray<CsvEntry>& target);
	static CString BuildCsvText(CArray<CsvEntry>& target);
	static CString AdjustAboutBasePath(CArray<CsvEntry>& target);
};

#endif
