Moduuli:Fr:Classement


local p = {}
local formattingdata = require "Module:Fr:Classement/Données" --libellés spéciaux et logos
local wikidata = require "Module:Fr:Interface Wikidata".fromLua
local linguistic = require "Module:Fr:Linguistique"

local function groupstatements(statements) -- regroupe les statements avec même mainid 
	local newlist = {}
	for i, j in pairs(statements) do -- si cet id est déjà utilisé par un autre élément, à déplacer vers un module + général ?
		local mainid = wikidata.getmainid(j)
		if not mainid then
			-- pas d'id, c'est une "special value"
		elseif not newlist[mainid] then 
			newlist[mainid] = {j}
		else
			table.insert(newlist[mainid], j)
		end
	end
	return newlist
end

local function formatmainstr(id) --  affiche le nom du statut du protection avec éventuellement un logo
	local str, logo
	if formattingdata[id] then
		str = formattingdata[id][1]
		logo = formattingdata[id][2]
	else
		str = wikidata.formatEntity(id)
	end
	if logo then
		str = '[[File:' .. logo .. '|x18px|alt=|link=]] ' .. str
	end
	return str
end

local function formatstatus(id, data)
	local mainstr = formatmainstr(id) --
	local details = {} -- informations complémentaires stockées dans les qualificatifs
	for i, j in pairs(data) do
		local pdate = wikidata.getFormattedQualifiers(j, {'P580'}, {precision = 'year'}) -- date de classement
		local part = wikidata.getFormattedQualifiers(j, {'P518'}, {link = '-'}) -- partie protégée
		local str = linguistic.conj({part, pdate}, ' en ')
		table.insert(details, str)
	end
	details = linguistic.conj(details, 'comma')
	details = linguistic.inparentheses(details)
	if details then
		return mainstr .. ' <small>' ..  details .. '</small>'
	end
	return mainstr
end

function p.formattedList(item)
	-- créé une liste des status patrimoniaux de l'élement
	local claims = wikidata.getClaims({entity = item, property = 'P1435', excludespecial = true})
	if not claims then
		return nil
	end
	local statuses = groupstatements(claims)
	local stringtable = {} -- liste des chaînes à retourner

	for id, data in pairs(statuses) do
		table.insert(stringtable, formatstatus(id, data))
	end

	local val = linguistic.conj(stringtable, "new line") .. wikidata.addtrackingcat('P1435')
	return wikidata.addLinkback(val, item, 'P1435')
end

return p