-- console & printing related functions

---------------
-- FUNCTIONS --
---------------

------------------------------------------------------------------------------------------------------------
-- alias for 'debugInfo'
log = debugInfo	


------------------------------------------------------------------------------------------------------------
-- Build color tag for use with debugInfo
function colorTag(r, g, b, a)	
	local function compToLetter(comp)
		if comp == nil then
			return 'F'
		end
		comp = math.floor(clamp(comp, 0, 255) / 16) + 1
		--debugInfo("Comp = " .. tostring(comp))
		return ComponentToLetter[comp]
	end			
	return "@{" .. compToLetter(r) .. compToLetter(g) .. compToLetter(b) .. compToLetter(a) .. "}"
end

-------------------------------------------------------------------------------------------------
-- Display a string, splitting it when too long 
function dumpSplittedString(str)	
	local splitSize = 50
	local numParts = math.floor(string.len(str) / splitSize) + 1	
	for i = 0, numParts do		
		debugInfo(string.sub(str, i * splitSize, i * splitSize + splitSize - 1))
	end	
end

-------------------------------------------------------------------------------------------------
-- display debug info with warning color
function debugWarning(msg)
	debugInfo(warningTag .. msg)
end

-------------------------------------------------------------------------------------------------
-- dump content of a lua object
function luaObject(obj, maxDepth)		
	dumpCallStack(0)
	if runCommand == nil
	then
		r2.print(obj)
	else
		__tmpInstance = obj
		runCommand("luaObject", "__tmpInstance", select(maxDepth, maxDepth, 10))
		__tmpInstance = nil
	end
end

-------------------------------------------------------------------------------------------------
-- dump content of a lua object (other version)
-- output : object with a "write" function that display the result. if nil, 'output' default to the global 'io'

function writeTable(t, output)	
	if output == nil then output = io end
	function writeSpace(n)
		for i = 1, n do
			output.write("\t")
		end
	end

	function writeTableR(t, n)
		if (type(t) == "table")
		then

			output.write("{\n")
			for key, value in pairs(t) do
				if ( type(value) == "table")
				then
					writeSpace(n+1)
					output.write (key)
					output.write ("=")
					writeTableR(value, n+1)
					
				elseif (type(value) == "string")
				then
					value = "\"" ..value .. "\""
					writeSpace(n+1)
					output.write(key, "=", value,", \n")
				elseif (type(value) == "number")
				then
					writeSpace(n+1)
					output.write(key, "=", value,", \n")
				end
			end
			writeSpace(n)
			output.write("},\n");
		end
	end
	
	writeTableR(t, 0)
end


--function loadTable(fileName)

--	local file = io.open(fileName, "r")

--	function loadTableR(file)

--		local line
--		while (line=file:read("*l")) ~= "}" then

--			if line == "{" then
--				loadTableR(file)
--			else

--			end
--		end
--	end

--	if file:read("*l") ~= "{" then
--		debugInfo("file doesn't store a valid table")
--		return
--	end

--	local resultT = loadTableR(file)
--	io.close(file)
--	return resultT
--end


-------------
-- STATICS --
-------------


ComponentToLetter = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }
warningTag		 = colorTag(255, 127, 0)

----------
-- INIT --
----------


-- for vianney's tests : if debugInfo function wasn't registered externally, then use the standard 'print' instead
if debugInfo == nil then
	debugInfo = r2.print
else
	function print(a0, a1, a2, a3, a4, a5)		
		local result = ""
		if a0 ~= nil then result = result .. tostring(a0) end
		if a1 ~= nil then result = result .. "  " ..tostring(a1) end
		if a2 ~= nil then result = result .. "  " ..tostring(a2) end
		if a3 ~= nil then result = result .. "  " ..tostring(a3) end
		if a4 ~= nil then result = result .. "  " ..tostring(a4) end
		if a5 ~= nil then result = result .. "  " ..tostring(a5) end
		if result ~= nil then debugInfo(result) end
	end
end


function gotoFile(name, line)
	local path = fileLookup(name)
	if path ~= "" then	
		local luaEditorPath = os.getenv("R2ED_LUA_EDITOR_PATH")
		if luaEditorPath == nil then
			debugInfo([[ Can't launch editor to edit lua file, please set ]] ..
			          [[ the environment variable R2ED_LUA_EDITOR_PATH    ]] ..
					  [[ with the path of your editor. ]])

		else
			launchProgram(luaEditorPath, path .. "/" .. tostring(line))
		end
	end
end