require ('strict');

local data = mw.loadData ('Module:Emoji/data');


--[[--------------------------< E M O C O D E >----------------------------------------------------------------

return the hexadecimal code associated with an emoji's name

	{{#invoke:Emoji|emocode|smiley}} → 1f603

When the specified name does not exist in the data table, returns the unrecognized name

If a name is not provided, returns  'smiley' (1f603)

TODO: return error messages; don't camouflage the erroneous or missing input

]]

local function emocode (frame)
	local emoji_name = mw.text.trim(frame.args[1] or "")						-- make sure empty and missing parameters both become the empty string
	emoji_name = emoji_name:lower();											-- down case because names in table are all lowercase
	emoji_name = emoji_name:gsub ('%s+', '_');									-- replace whitespace with underscore
	if '' == emoji_name then emoji_name = 'smiley' end							-- use default value of 'smiley' if parameter is empty or missing
	return data.emoji_hex_from_name_t[emoji_name] or emoji_name
end


--[[--------------------------< E M O N A M E >----------------------------------------------------------------

return the emoji's name associated with a particular hexadecimal code

	{{#invoke:Emoji|emoname|1f603}} → smiley

When the specified hexadecimal code does not exist in the data table, returns the unrecognized code

If a hexadecimal code is not provided, returns  '1f603' (smiley)

TODO: return error messages; don't camouflage the erroneous or missing input

]]

local function emoname (frame)
	local emoji_code = mw.text.trim(frame.args[1] or "")						-- make sure empty and missing parameters both become the empty string
	emoji_code = emoji_code:lower();											-- down case because codes in table are all lowercase
	if '' == emoji_code then emoji_code = '1f603' end							-- use default value of '1f603' if parameter is empty or missing
	return data.emoji_name_from_hex_t[emoji_code] or emoji_code
end


--[[--------------------------< E X P O R T S >----------------------------------------------------------------
]]

return {
	emocode = emocode,
	emoname = emoname,
	}