Documentation for this module may be created at Module:wikimedia languages/templates/doc

local export = {}

function export.exists(frame, fallback)
	local args = frame.args
	local lang = args[1] or error("Wikimedia language code has not been specified. Please pass parameter 1 to the module invocation.")
	
	lang = require("Module:wikimedia languages")[(fallback and "getByCodeWithFallback" or "getByCode")](lang)
	
	if lang then
		return "1"
	else
		return ""
	end
end

function export.existsWithFallback(frame)
	return export.exists(frame, true)
end

function export.getByCode(frame, fallback)
	local args = frame.args
	local langcode = args[1] or error("Wikimedia language code has not been specified. Please pass parameter 1 to the module invocation.")
	local itemname = args[2] or error("Type of information to look up has not been specified. Please pass parameter 2 to the module invocation.")
	
	local lang = require("Module:wikimedia languages")[(fallback and "getByCodeWithFallback" or "getByCode")](langcode)
	
	if not lang then
		error("The wikimedia language code '" .. langcode .. "' is not valid.")
	end
	
	-- The item that the caller wanted to look up
	if itemname == "getAllNames" then
		local index = args[3]; if index == "" then index = nil end
		index = tonumber(index or error("Please specify the numeric index of the desired name."))
		return lang:getAllNames()[index] or ""
	elseif itemname == "getWiktionaryLanguage" then
		return lang:getWiktionaryLanguage():getCode()
	elseif lang[itemname] then
		local ret = lang[itemname](lang)
		
		if type(ret) == "string" then
			return ret
		else
			error("The function \"" .. itemname .. "\" did not return a string value.")
		end
	else
		error("Requested invalid item name \"" .. itemname .. "\".")
	end
end

function export.getByCodeWithFallback(frame)
	return export.getByCode(frame, true)
end

return export