require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local mWikidata = require('Modulo:Wikidata')
local p = {}

function p.main(frame)
	local t = getArgs(frame)
	local dato = t[1]
	local tracce = {}
	local i
	local ss
	local wdTracce, wdAutori, wdParole, wdBasatoSu
	local ordine, ddato, titolo, durata

	wdTracce = mWikidata._getClaims('P658', { from = dato })

	if wdTracce then

		local num = 0
		for _, traccia in ipairs(wdTracce) do
			ss = ''
			
			titolo = mWikidata._formatStatement(traccia)

			ordine = mWikidata._formatQualifiers(traccia, 'P1545')
			num = num + 1
			if ordine == nil then
				ordine = num
				ss = '-'
			else
				ordine = tonumber(ordine) or num
				ss = ordine
			end
			
			durata = mWikidata._formatQualifiers(traccia, 'P2047')
			if durata == nil then
				durata = 'n.d.'
			else
				durata = tonumber(durata) or 0
				if (durata > 59) then
					durata = math.floor(durata/60) .. '\' ' .. (durata - 60*math.floor(durata/60)) .. '"'
				else
					durata = durata .. '"'
				end
			end

			ss = ss .. '. \'\'' .. titolo .. '\'\' (' .. durata .. ')'

			if traccia.mainsnak.datavalue.value.id then
				ddato =  traccia.mainsnak.datavalue.value.id
		 		wdAutori = mWikidata._getClaims('P86', { from = ddato })
				if wdAutori then
					ss = ss .. ' <small>Comp.: '
					i = 1
					for _, autore in ipairs(wdAutori) do
						if (i>1) then ss = ss .. ', ' end
						i = i + 1
						ss = ss .. mWikidata._formatStatement(autore)
					end
					ss = ss .. '</small>'
				end
				wdParole = mWikidata._getClaims('P676', { from = ddato })
				if wdParole then
					ss = ss .. ' <small>Parol.: '
					i = 1
					for _, parola in ipairs(wdParole) do
						if (i>1) then ss = ss .. ', ' end
						i = i + 1
						ss = ss .. mWikidata._formatStatement(parola)
					end
					ss = ss .. '</small>'
				end
				wdBasatoSu = mWikidata._getClaims('P144', { from = ddato })
				if wdBasatoSu then
					ss = ss .. ' <small>Basato su: '
					i = 1
					for _, basato in ipairs(wdBasatoSu) do
						if (i>1) then ss = ss .. ', ' end
						i = i + 1
						ss = ss .. mWikidata._formatStatement(basato)
					end
					ss = ss .. '</small>'
				end
			end

			table.insert(tracce,ordine,ss)

		end

	end

--	return table.concat(tracce, '<br/>')
	ss = ''
	for k, v in pairs( tracce ) do
		ss = ss .. v .. '<br/>'
	end
	ss = ss .. ' --- <br/>'
	for i=1, #tracce do
		ss = ss .. tracce[i].tracce .. '<br/>'
	end
	return ss

end

return p