-- Ce module regroupe des fonctions utilisées par les brique d'infobox V2.

local p = {}

-- Retire toutes catégories, liens internes, externes et balises html pour ne garder que le texte brut.
local function nettoyageTexte( texte )
	if type( texte ) == 'string'  then
		if texte:match( '[%[<]' ) then
			local function texteDuLien( l, t )
				return ( t ~= '' and t ) or l
			end
			-- nettoyage des catégories
			texte = texte
				:gsub( '%[%[[%s_]*[Cc]atégorie[%s_]*:.-%]%]', '' )
				:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' )
			-- nettoyage des liens internes
				:gsub( '%[%[([^%[%]|]*)|?([^%[%]]*)%]%]', texteDuLien )
			-- nettoyage des liens externes
				:gsub( '%[https?://[^%[%] ]* *([^%]]+)%]', '%1' )
				:gsub( '%[//[^%[%] ]* *([^%]]+)%]', '%1' )
			-- nettoyage des balises html
				:gsub( '%b<>', '' )
		end
		return texte
	end
end


-- Génère l'appel au ficher image.
-- Paramètres :
--	* image : nom du fichier
--	* légende :
--	* taille : taille en px à laquelle l'image doit être affichée
--	* alt : alternative textuelle à l'image
--	* link : page vers laquelle redirige un click sur l'image
--	* border : s'il faut afficher une bordure à l'image
--	* page : pour les image multipage (djvu), page à afficher
-- Tous les paramètres sont obligatoires, mais peuvent contenir une chaine vide.
function p.image( frame )
	local args = frame.args
	
	-- analyse du nom de fichier
	local image = args.image
		:gsub( '%[%[[%s_]*[Cc]atégorie[%s_]*:.-%]%]', '' )
		:gsub( '%[%[[%s_]*[Cc]ategory[%s_]*:.-%]%]', '' )
		:gsub( '%[%[[Ff]ichier:([^|%[%]]+).+', '%1' )
		:gsub( '%[%[[Ii]mage:([^|%[%]]+).+', '%1' )
		:gsub( '%[%[[Ff]ile:([^|%[%]]+).+', '%1' )
	
	-- analyse de la légende
	local legende = args[ 'légende' ]
		:gsub( '%[%[[%s_]*[Cc]at[ée]gor[yi]e?[%s_]*:.-%]%])', '' )
	
	-- analyse de la taille
	local taille = args.taille:gsub( '%D', '' )
	taille = tonumber( taille ) or 280
	if taille > 280 then
		taille = 280
	end
	
	-- analyse de l'alternative
	local alt = nettoyageTexte( args.alt )
	
	-- génération du lien
	local wiki = { image }
	table.insert( wiki, taille .. 'px' )
	
	if legende ~= '' then
		table.insert( wiki, legende )
	end
	if args.border ~= '' then
		table.insert( wiki, 'border' )
	end
	if alt == '' then
		alt = 'image illustrative de l’article ' .. mw.title.getCurrentTitle().text 
	end
	table.insert( wiki, 'alt=' .. alt )
	if args.link ~= '' then
		table.insert( wiki, 'link=' .. args.link )
	end
	if args.page ~= '' then
		table.insert( wiki, 'page=' .. args.page )
	end
	
	return '[[fichier:' .. table.concat( wiki, '|' ) .. ']]'
end

return p