-- Moduli necessari
local getArgs = require('Modulo:Arguments').getArgs -- carica i valori dei parametri
local FFLink = require('Modulo:FormeFlesse') -- carica la funzione per le desinenze delle forme flesse

-- Funzione della categorizzazione
local function categorizza(cat)
	return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat)
end

-- funzione per rilevare se una determinata pagina esiste o no
local function titleExists(pagina)
	local title = mw.title.new(pagina)
	return title and title.exists
end


local p = {}

function p.Tabs(frame)
local arg = getArgs(frame)
-- variabile a me sconosciuta ma che comunque nel template c'è, io ce la metto
-- credo sia un titolo, e io la chiamo titolo, poi vediamo...
local titolo = arg[5] or '&nbsp;'

--Forme base
local masc = arg.m or arg[1] 
local mascPl = arg.mp or arg[2] 
local fem = arg.f or arg[3] 
local femPl = arg.fp or arg[4]

-- Forme alternative
local masc2 = arg.m2 or ''
local mascPl2 = arg.mp2  or ''
local fem2 = arg.f2 or ''
local femPl2 = arg.fp2 or ''

-- Gestione per mostrare o meno le forme alternative
if masc2 ~= '' then masc2Insert = '/ [[' .. masc2 .. ']]' else masc2Insert = '' end
if mascPl2 ~= '' then mascPl2Insert = '/ [[' .. mascPl2 .. ']]' else mascPl2Insert = '' end
if fem2 ~= '' then fem2Insert = '/ [[' .. fem2 .. ']]' else fem2Insert = '' end
if femPl2 ~= '' then femPl2Insert = '/ [[' .. femPl2 .. ']]' else femPl2Insert = '' end

-- Funzione per separare le desinenze, fondamentale per l'autocompilazione della pagina [[Speciale:FormeFlesse]]
-- Usa la funzione "differenze" del [[Modulo:FormeFlesse]]

-- IF per controllare che tutti i parametri minimi siano stati scritti
if masc == nil or mascPl == nil or fem == nil or femPl == nil then
	modifica = ' ['..mw.title.getCurrentTitle():fullUrl{action = 'edit'}..' correggi il template]'
	ErrVuoti ='<strong class="error plainlinks">Uno o più parametri del {{[[Template:Tabs|Tabs]]}} sono stati lasciati vuoti, '..modifica..'</strong>'
	return ErrVuoti..''..categorizza('Template per le forme flesse senza informazioni')
else
	
	local differenze =  FFLink.Differenze(arg)
	local function categorizzazione (frame)

--[=[###########################################################################
							 GESTIONE DELLA CATEGORIZZAZIONE
#############################################################################]=]

--Categorizzazione forme semplici
	if titleExists(masc) == false then
				categoriaMasc = ''..categorizza('Lemmi con forma maschile da scrivere')
			else 
				categoriaMasc = ''
			end	
			
	if titleExists(mascPl) == false then
				categoriaMascPl = ''..categorizza('Lemmi con forma maschile plurale da scrivere')
			else 
				categoriaMascPl = ''
			end	
			
	if titleExists(fem) == false then
				categoriaFem = ''..categorizza('Lemmi con forma femminile da scrivere')
			else 
				categoriaFem = ''
			end	
			
	if titleExists(femPl) == false then
				categoriaFemPl = ''..categorizza('Lemmi con forma femminile plurale da scrivere')
			else 
				categoriaFemPl = ''
			end	
			
	
-- Categorizzazione forme alternative	
	if titleExists(masc2) == false then
				categoriaMasc2 = ''..categorizza('Lemmi con forma maschile alternativa da scrivere')
			else 
				categoriaMasc2 = ''
			end	
			
	if titleExists(mascPl2) == false then
				categoriaMascPl2 = ''..categorizza('Lemmi con forma maschile plurale alternativa da scrivere')
			else 
				categoriaMascPl2 = ''
			end	
			
	if titleExists(fem2) == false then
				categoriaFem2 = ''..categorizza('Lemmi con forma femminile alternativa da scrivere')
			else 
				categoriaFem2 = ''
			end	
			
	if titleExists(femPl2) == false then
				categoriaFemPl2 = ''..categorizza('Lemmi con forma femminile plurale alternativa da scrivere')
			else 
				categoriaFemPl2 = ''
			end	
		return		''..categoriaMasc..''..categoriaMasc2..''..categoriaMascPl..''..categoriaMascPl2..''..categoriaFem..''..categoriaFem2..''..categoriaFemPl..''..categoriaFemPl2
	end	

--[=[###########################################################################
							 CREAZIONE DELLA TABELLA
#############################################################################]=]

	    tabs =		   '{| style="float:right; margin-left:0.5em; margin-bottom:0.5em;'
		tabs = tabs .. 'border: 1px solid #AAAAAA; border-collapse:collapse;" cellpadding="3" rules="all"\n'
		tabs = tabs .. '|- align="center"\n'
		tabs = tabs .. '!'..titolo..--[=['<div class="sost" id="ButtonFF" >'.. differenze .. '</div>]=]'\n'
		tabs = tabs .. '! bgcolor="#FFFFE0" |&nbsp;\'\'[[singolare]]\'\'&nbsp;\n'
		tabs = tabs .. '! bgcolor="#FFFFE0" |&nbsp;\'\'[[plurale]]\'\'&nbsp;\n'
		tabs = tabs .. '|- align="center"\n'
		tabs = tabs .. '! bgcolor="#FFFFE0" |&nbsp;\'\'[[maschile]]\'\'&nbsp;\n'
		tabs = tabs .. '| &nbsp; [['..masc..']]&nbsp;'..masc2Insert..'\n'
		tabs = tabs .. '| &nbsp; [['..mascPl..']]&nbsp;'..mascPl2Insert..'\n'
		tabs = tabs .. '|- align="center"\n'
		tabs = tabs .. '! bgcolor="#FFFFE0" |&nbsp;\'\'[[femminile]]\'\'&nbsp;\n'
		tabs = tabs .. '| &nbsp; [['..fem..']]&nbsp;'..fem2Insert..'\n'
		tabs = tabs .. '| &nbsp; [['..femPl..']]&nbsp;'..femPl2Insert..'\n'
		tabs = tabs .. '|}\n' ..categorizzazione(frame)
		return tabs 
	end
end

return p