local p = {}

function set_error(msg)
	return string.format('<span class="error">%s</span>', msg)
end

function p.main(frame)
	local page = 'Wikipedia:Amministratori/Sistema di voto/Quorum'
	local content = mw.title.new(page):getContent()
	local quorum = 0
	local elections, candidates, hash = {}, {}, {}
	for election in string.gmatch(content, '%[%[(W%a+:Amministratori/Elezioni/.-)[|%]]') do
		table.insert(elections, election)
		local candidate = election:match('Elezioni/([^/]+)')
		table.insert(candidates, string.format('[[User:%s|%s]]', candidate, candidate))
	end
	if #elections ~= 8 then
		return set_error('Non è stato trovato un elenco di 8 elezioni nella pagina ' .. page)
	end
	for _, election in ipairs(elections) do
		content = mw.title.new(election):getContent()
		if not content then
			return set_error('Non è stata trovata la pagina della seguente elezione: ' .. election)
		end
		if hash[election] then
			return set_error('È stata elencata più volte la seguente elezione: ' .. election)
		end
		hash[election] = true
		content = content:gsub('(\n==+ *[^\n]- *==+)', '\r%1')
		for heading, section in string.gmatch(content, '\n==+ *([^\n]-) *==+(.-)\r') do
			if heading == 'Pro' or heading == 'Contro' then
				local _, count = section:gsub('\n#[^#:*\n][^\n]-%a', '')
				quorum = quorum + count
			end
		end
	end
	candidates = mw.text.listToText(candidates, ', ', ' e ')
	quorum = math.floor(quorum / 12)
	return string.format('Pertanto il quorum per la prossima votazione, calcolato in base al numero di favorevoli e contrari nelle votazioni relative a %s, è pari a <b>%s</b>.', candidates, quorum)
end

return p