Belgekirina modulê[biafirîne]
-- Fonctions communes à diverses infobox
local localdata = require( 'Module:Infobox/Localdata' )
local wikidata = require( 'Module:Wikidata/fr' )
local item = localdata.item
local p = {}

function p.title(icon, style, subtitleparam, subtitlequery, italic)
	local function hide(param, value)
		if localdata[param] ~= '-' then
			return value
		end
	end
	
	return {
		type = 'title',
		value = function() 
			return localdata['nom'] or localdata['association_nom'] or localdata['nom_think'] or localdata['acronymelaboratoire']
				or wikidata.getLabel(localdata.item) and mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) )
				or mw.title.getCurrentTitle().text
		end,
		subtitle = function() if localdata[subtitleparam] ~= '-' then return localdata[subtitleparam] end end,
		wikidatasubtitle = hide(subtitleparam, subtitlequery),
		icon = icon,
		style = style,
		italic = italic,
		setdisplaytitle = italic,
	}
end

function p.mainimage(args, defaultimage)
	if type( args ) ~= 'table' then
		args = { cat = args, defaultimage = defaultimage }
	end
	return {
		type = 'images',
		imageparameters =  {'image', 'photo', 'Photo', 'wêne'},
		defaultimages = args.defaultimage or defaultimage,
		defaultimagelink = 'Aide:Insérer une image',
		sizeparameter = 'mezinahiya wêne',
		uprightparameter = 'upright',
		defaultupright = args.upright,
		defaultsize = 	args.size,
		maintenancecat = args.cat or 'Article à illustrer',
		captionparameter = {'légende', 'légende image', 'Légende', 'sernavê_wêne', 'sernavê wêne'},
		altparameter = args.altparameter or 'alternative image',
		defaultalt = args.alt or 'Image dans Infobox.',
		defaultimagealt = args.defaultimagealt,
		wikidata = args.wikidata or {property = {'P18', 'P5252'}},
		numval = 1,
	}
end

function p.interior(upright)
	return {
		type = 'images',
		imageparameters =  {'intérieur', 'interior'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = 'légende intérieur',
		property = 'P5775',
		defaultupright = upright or '1',
		uprightparameter = 'upright intérieur',
		sizeparameter = 'taille intérieur',
		numval = 1,
	}
end

function p.logo(upright)
	return {
		type = 'images',
		imageparameters =  {'logo', 'association_logo'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = 'légende logo',
		property = 'P154',
		defaultupright = upright or '0.6',
		uprightparameter = 'upright logo',
		sizeparameter = 'taille logo',
		numval = 1,
	}
end

function p.blason(upright)
	return {
		type = 'images',
		imageparameters =  {'blason', 'sceau'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = {'légende blason', 'légende sceau'},
		property = {'P94', 'P158'},
		defaultupright = upright or '0.8',
		uprightparameter = {'upright blason', 'upright sceau'},
		sizeparameter = {'taille blason', 'taille sceau'},
		numval = 1,
	}
end

function p.flag(upright, id)
	local drapeau = wikidata.formatStatements{entity = id, property = 'P163', defaultlink = '-'}
	return {
		type = 'images',
		imageparameters =  {'drapeau'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = drapeau or 'légende drapeau',
		property = 'P41',
		defaultupright = upright or '1',
		uprightparameter = 'upright drapeau',
		sizeparameter = 'taille drapeau',
		numval = 1,
	}
end

function p.sign(upright)
	return {
		type = 'images',
		imageparameters =  {'signalisation'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = 'légende signalisation',
		property = 'P14',
		defaultupright = upright or '0.4',
		uprightparameter = 'upright signalisation',
		sizeparameter = 'taille signalisation',
		numval = 1,
	}
end

function p.icon(upright)
	return {
		type = 'images',
		imageparameters =  {'icône'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = 'légende icône',
		property = 'P2910',
		defaultupright = upright or '0.4',
		uprightparameter = 'upright icône',
		sizeparameter = 'taille icône',
		numval = 1,
	}
end

function p.bathymetricmap(upright)
	return {
		type = 'images',
		imageparameters =  {'carte bathymétrique'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = 'légende carte bathymétrique',
		property = 'P207',
		defaultupright = upright or '1',
		uprightparameter = 'upright carte bathymétrique',
		sizeparameter = 'taille carte bathymétrique',
		numval = 1,
	}
end

function p.routemap(upright)
	return {
		type = 'images',
		imageparameters =  {'tracé'},
	--	defaultimage = {},
	--	maintenancecat =
		captionparameter = 'légende tracé',
		property = 'P15',
		defaultupright = upright or '1',
		uprightparameter = 'upright tracé',
		sizeparameter = 'taille tracé',
		numval = 1,
	}
end

-- Liens externes
function p.website(localparam) -- texte libre [http://example.org example.org] ou url seule localparam est désigne le paramètre utilisé historiquement dans le modèle pour le site web (legacy)
	return { 
		type = 'mixed',
		label = 'Malper', 
		plurallabel = 'Malper',
		wikidata = function()
				local values, num = wikidata.formatAndCat {
					entity = localdata.item,
					displayformat = 'weblink',
					conjtype = '<br />',
					property = 'P856',
					isinlang = 'ku',
					rank = 'valid',
					excludespecial = true, -- excludespecial car il peut y avoir marqué "aucune valeur" pour le français, mais y avoir un site en anglais
					returnnumberofvalues = true,
				}
				if not values then
					values, num = wikidata.formatAndCat {
						entity = localdata.item,
						displayformat = 'weblink',
						conjtype = '<br />',
						property = 'P856',
						showlang = false,
						excludespecial = true,
						returnnumberofvalues = true,
					}
				end
				return values, num
			end,
		value = 
			function()
				local siteurl = localdata[localparam] or localdata['site web'] or localdata['site_web'] or localdata['site officiel'] or localdata['site internet'] or localdata['web']
				local sitename = localdata['nom site']
				if siteurl then
					if siteurl:find("url") then
					return siteurl
				else
					return require("Module:Weblink").makelink(siteurl, sitename)
					end
				end
			end,
	}
end

-- Son, prononciation
function p.selectSound(prop)
	-- priorité au kurdî
	if wikidata.getClaims{entity = localdata.item, property = prop, qualifier = {'P407'}, qualifiervalue  = {'Q36368'} } then
		return {property = prop, qualifier = {'P407'}, qualifiervalue  = {'Q36368'} }
	end
	return {property = prop}
end

function p.prononciation()
	return {
		type		     = 'images',
		style            = {['padding-top'] = '25px'},
		defaultcaption   = 'Bilêvkirin',
		captionparameter = 'légende prononciation',
		value		     =  {'prononciation', 'bilêvkirin'},
		defaultsize      = '280',
		wikidata         = p.selectSound('P443'),
		numval           = 1,
	}
end

-- Fonctions de géolocalisation
function p.country(default)
	local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
	return coordfunctions.country(default)	
end

function p.geoloc(params)
	local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
	return coordfunctions.geoloc(params)	
end

function p.coordinates(params)
	local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
	return coordfunctions.coordinates(params)
end

function p.locationmap(params)
	local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
	return coordfunctions.locationmap(params)	
end

function p.detailedmap(params)
	local coordfunctions = require 'Module:Infobox/Fonctions/Géolocalisation'
	return coordfunctions.detailedmap(params)	
end

return p