//============================================
//XNvgpCu REMY
//fobOx
//============================================

let remy_Debug_ItemIDList = [];
let remy_Debug_LoggedItemIDList = [];

let _REMY_DEBUG_NOEXIST = 0;
let _REMY_DEBUG_ITEM_EXIST = 1;
let _REMY_DEBUG_LOGGEDITEM_EXIST = 2;


//fobO[hݒ肷=============================
function REMY_Debug_SetDebugMode(let val)
{
	remy_DebugMode = val;

	if(val){
		if(!IsCommonDataAreaExists("LIB_REMY_DEBUG"))
		{
			CreateCommonDataArea("LIB_REMY_DEBUG");
		}
		CreateDebugWindow();
	}
}//end function

//ۂɂ
function REMY_Debug_ClearLog()
{
	ClearCommonDataEx("LIB_REMY_DEBUG");

}//


//fobOÕ_v=============================

//fobOO_v
function REMY_Debug_DumpDebugLog()
{
	SetCommonDataEx("LIB_REMY_DEBUG", "REMY_ITEM_ID", remy_Debug_ItemIDList);
	SetCommonDataEx("LIB_REMY_DEBUG", "REMY_LOGGEDITEM_ID", remy_Debug_LoggedItemIDList );

	SaveCommonDataEx("LIB_REMY_DEBUG", GetCurrentScriptDirectory() ~ "debug_log.dat");
}//end function


//fobOO̓Ǎ=============================

function REMY_Debug_LoadDebugLog()
{
	LoadCommonDataEx("LIB_REMY_DEBUG", GetCurrentScriptDirectory() ~ "debug_log.dat");

	remy_Debug_ItemIDList = GetCommonDataDefaultEx("LIB_REMY_DEBUG", "REMY_ITEM_ID", []);
	remy_Debug_LoggedItemIDList = GetCommonDataDefaultEx("LIB_REMY_DEBUG", "REMY_ITEM_ID", []);

}//end function


//fobOEBhE^fobOȌ=============================

//fobOEBhEɏ݁B
//dump:fobOÕ_vΏۂɂBŐṼf[^݂̂ێ
function REMY_Debug_SetDebugData(let line, let name, let data, let dump)
{
	if(!remy_DebugMode){ return; }

	OutputDebugString(line, name, data);
	if(dump){
		private_REMY_Debug_SetItem(name);
		SetCommonDataEx("LIB_REMY_DEBUG", name, data);
	}

}//end function

//fobOEBhEɏ݁B
//add_log:fobOOɓo^Bߋf[^̃OcB
function REMY_Debug_SetLoggedDebugData(let line, let name, let data, let add_log)
{
	if(!remy_DebugMode){ return; }

	OutputDebugString(line, name, data);
	if(add_log){
		private_REMY_Debug_SetLoggedItem(name);
		let log = GetCommonDataDefault("LIB_REMY_DEBUG", name, []);
		SetCommonDataEx("LIB_REMY_DEBUG", name, log ~ [data]); 
	}

}//end function


function REMY_Debug_GetDebugData(let name, let default_data)
{
	return GetCommonDataDefault("LIB_REMY_DEBUG", name, default_data);
}//end function


//private֐=========================================
//ڂ̒ǉ
function private_REMY_Debug_SetItem(let name)
{
	let existance = private_REMY_Debug_GetItemExistance(name);

	//ɓo^Ă܂B
	if(existance == _REMY_DEBUG_ITEM_EXIST){ return; }

	//OACeɓo^Ă̂łB
	if(existance == _REMY_DEBUG_LOGGEDITEM_EXIST)
	{
		private_REMY_Debug_DeleteItemID(name);
	}

	//o^܂
	remy_Debug_ItemIDList = remy_Debug_ItemIDList ~ [name]; 

}//end function

//Oڂ̒ǉ
function private_REMY_Debug_SetLoggedItem(let name)
{
	let existance = private_REMY_Debug_GetItemExistance(name);

	//ɓo^Ă܂B
	if(existance == _REMY_DEBUG_LOGGEDITEM_EXIST){ return; }

	//ʏACeɓo^Ă̂łB
	if(existance == _REMY_DEBUG_ITEM_EXIST)
	{
		private_REMY_Debug_DeleteItemID(name);
	}

	//o^܂
	remy_Debug_LoggedItemIDList = remy_Debug_LoggedItemIDList ~ [name]; 

}//end function

//ڂɂ邩H@
function private_REMY_Debug_GetItemIDExistance(let name)
{
	let id = private_REMY_Debug_GetItemID(name);
	if(id != -1){ return _REMY_DEBUG_ITEM_EXIST; }

	let id_log = private_REMY_Debug_GetLoggedItemID(name);
	if(id != -1){ return _REMY_DEBUG_LOGGEDITEM_EXIST; }

	return _REMY_DEBUG_NOEXIST;

}//end function

//ڂɂ邩HΏ
function private_REMY_Debug_DeleteItemID(let name)
{
	let id = private_REMY_Debug_GetItemID(name);
	if(id != -1){ remy_Debug_ItemIDList = erase(remy_Debug_ItemIDList, id); }

	let id_log = private_REMY_Debug_GetLoggedItemID(name);
	if(id_log != -1){ remy_Debug_LoggedItemIDList = erase(remy_Debug_LoggedItemIDList, id_log); }

	return _REMY_DEBUG_NOEXIST;

}//end function

//ڂ̓o^ԍ擾@
function private_REMY_Debug_GetItemID(let name)
{
	ascent(i in 0..length(remy_Debug_ItemIDList))
	{
		if(remy_Debug_ItemIDList[i] == name){return i;}
	}
	return -1;

}//end function

//Oڂ̓o^ԍ擾@
function private_REMY_Debug_GetLoggedItemID(let name)
{
	ascent(i in 0..length(remy_Debug_LoggedItemIDList))
	}
		if(remy_Debug_LoggedItemIDList[i] == name){return i;}
	}
	return -1;

}//end function



