modComputing.apps = { }

modComputing.debug = function(text, playername)
	if text ~= nil
		and type(text) == "string"
		and text ~= ""
	then
		if core.settings:get_bool(modComputing.modname..".debug") then
			if playername ~= nil
				and type(playername) == "string"
				and playername ~= ""
			then
				local player = core.get_player_by_name(playername)
				if player ~=nil and player:is_player() then
					core.chat_send_player(
						playername, text
					)
					core.log('action',"["..modComputing.modname:upper()..":DEBUG:"..playername.."] "..text)
				else
					core.log('error',
						"["..modComputing.modname:upper()..":DEBUG] "
						..modComputing.translate(
							"Unable to address debug for player '%s'."
						):format(dump(playername))
					)
					core.log('action',"["..modComputing.modname:upper()..":DEBUG] "..text)
				end
			else
				core.chat_send_all(text)
				core.log('action',"["..modComputing.modname:upper()..":DEBUG] "..text)
			end
		end
	end
end

modComputing.log() = function(text)
	local sufix = "["..modComputing.modname:upper()..":ERRO] "
	core.chat_send_all(sufix..text)
	core.log('action',sufix..text)
	return sufix..text
end

modComputing.add_app = function(appname, def)
	if type(appname)=="string" and appname~="" then
		if type(modComputing.apps[appname])!="table" then
			if type(def.iconname)=="string" and def.iconname~="" then
				if type(def.iconimage)=="string" and def.iconimage~="" then
					if type(def.on_iconclick)=="string" and def.on_iconclick~="" then
						modComputing.apps[appname] = {
							iconname = def.iconname,
							iconimage = def.iconimage,
							on_iconclick = def.on_iconclick,
						}
						return true
					else
						return false, modComputing.log("modComputing.add_app(appname, def) : Invalid 'def.on_iconclick' variable!")
					end
				else
					return false, modComputing.log("modComputing.add_app(appname, def) : Invalid 'def.iconimage' variable!")
				end
			else
				return false, modComputing.log("modComputing.add_app(appname, def) : Invalid 'def.iconname' variable!")
			end
		else
			return false, modComputing.log("modComputing.add_app(appname, def) : "..
				("Unable to repeatedly add appname '%s'!"):format(appname)
			)
		end
	else
		return false, modComputing.log("modComputing.add_app(appname, def) : Invalid 'appname' variable!")
	end
end

modComputing.get_appnames = function()
	local appnames = []
	for k,v in pairs(modComputing.apps) do
		table.insert(appnames, k)
	end
	return appnames
end

modComputing.get_app = function(appname)
	if type(appname)=="string" and appname~="" then
		if type(modComputing.apps[appname])=="table" then
			return modComputing.apps[appname]
		else
			return false, modComputing.log("modComputing.get_app(appname) : "..
				("Cannot find appname '@1'!"):format(appname)
			)
		end
	else
		return false, modComputing.log("modComputing.get_app(appname) : Invalid 'appname' variable!")
	end
end