Documentation for this module may be created at Module:Wikidata/doc

local p = {}

local prop_named_after = 'P138'
local prop_image = 'P18'
local PROP_LOCATION = 'P276'

p.named_after = function( frame )
	if frame.args.wikidata == nil or frame.args.wikidata == '' then
		return ''
	end
	local item = mw.ext.UnlinkedWikibase.getEntity( frame.args.wikidata );
	if item.claims[prop_named_after] ~= nil then
		local named_after_id = item.claims[prop_named_after][1].mainsnak.datavalue.value.id
		local named_after = mw.ext.UnlinkedWikibase.getEntity( named_after_id )
		return named_after.labels.en.value
	end
end

p.image = function( frame )
	if frame.args.wikidata == nil or frame.args.wikidata == '' then
		return ''
	end
	local item = mw.ext.UnlinkedWikibase.getEntity( frame.args.wikidata );
	if item.claims[prop_image] ~= nil then
		return item.claims[prop_image][1].mainsnak.datavalue.value
	end
end

-- =p.locations({args={wikidata='Q5646280'}})
p.locations = function( frame )
	if frame.args.wikidata == nil or frame.args.wikidata == '' then
		return ''
	end
	local item = mw.ext.UnlinkedWikibase.getEntity( frame.args.wikidata );
	if item == nil then
		return ''
	end
	local isProse = false
	if frame.args.format ~= nil and frame.args.format == 'prose' then
		isProse = true
	end
	if item.claims[PROP_LOCATION] == nil then
		return ''
	end
	local locations = {}
	for k,v in pairs( item.claims[PROP_LOCATION] ) do
		local locationId = v.mainsnak.datavalue.value.id
		local locPage = mw.ext.UnlinkedWikibase.getLocalTitle( locationId )
		local locPageTitle = ''
		if locPage ~= nil then
			locPageTitle = locPage.text
		else
			local locPageItem = mw.ext.UnlinkedWikibase.getEntity( locationId )
			locPageTitle = locPageItem.labels.en.value
		end
		-- listToText wants tables to be 1-indexed.
		if isProse then
			locations[k+1] = '[[' .. locPageTitle .. ']]'
		else
			locations[k+1] = locPageTitle
		end
	end
	if isProse then
		return mw.text.listToText( locations, ', ', ' and ' )
	else
		return table.concat( locations, '; ' )
	end
end

p.enwiki = function( frame )
	if frame.args.wikidata == nil or frame.args.wikidata == '' then
		return ''
	end
	local item = mw.ext.UnlinkedWikibase.getEntity( frame.args.wikidata );
	if item.sitelinks ~= nil and item.sitelinks.enwiki ~= nil then
		return item.sitelinks.enwiki.title
	end
end

return p