local p = {}

function p.linhadotempo(frame)
	timeline_header = [=[
ImageSize  = width:800 height:auto barincrement:21
PlotArea   = right:20 left:20 top:5 bottom:60
Legend     = position:bottom orientation:horizontal
			
Colors     =
 id:bg        value:rgb(0.9,0.9,1)
 id:major     value:black
 id:minor     value:rgb(0.8,0.8,0.8)
 id:text      value:black
 id:header    value:rgb(0.6,0.6,0.9)
 id:htext     value:white
 id:atual     value:rgb(0.5,0.9,0.5) legend:Atuais_titulares
 id:antigo    value:rgb(0.9,0.8,0.5) legend:Antigos_titulares
			
BackgroundColors = canvas:bg
			
TimeAxis   = orientation:horizontal
DateFormat = dd/mm/yyyy
]=]
	
	period = 	[=[
Period = from:%s till:%s
]=]
	scalemajor	= 	[=[
ScaleMajor = gridcolor:major unit:year  increment:1 start:%s
]=]
	scaleminor	=	[=[
ScaleMinor = gridcolor:minor unit:month increment:1 start:%s
]=]
		
	bardata = 	[=[
BarData    =
]=]
			  
	bardata_base = 	[=[
 Bar:H%.4d
 Barset:S%.4d
]=]

	plotdata = [=[
PlotData   =
 width:15 textcolor:text
]=]
  			   
  	plotdata_base = [=[
 bar:H%.4d color:header textcolor:htext width:20 shift:(-95,-5) fontsize:m from:%s till:end text:"%s%.4d"
]=]

	barset_base = 	[=[
 barset:S%.4d
  shift:(5,-5) anchor:from fontsize:m
]=]
	
	barsetline_base_old = 	[=[
  color:antigo  from:%s till:%s text:"[[User:%s|%s]]"
]=]

	barsetline_base_new = [=[
  color:atual  from:%s till:%s text:"[[User:%s|%s]]"
]=]
					  
	barset_sep = 	[=[
 barset:break
]=]

	data_inicio, ano_inicio = extraidata(frame.args.datainicio)
	data_fim, ano_fim = extraidata(frame.args.datafim)
	prefixo_barra = frame.args.prefixo_barra or ""
	if prefixo_barra ~= "" then
		prefixo_barra = prefixo_barra .. " "
	end
	
	local barsets = {}
	local pos = 1
	while frame.args[pos] do
		usu_data_ini, usu_ano_ini, usu_data_fim, usu_ano_fim, usu, active = extraimandato(frame.args[pos])
		if usu then
			if active then
				barsetline_base = barsetline_base_new
			else
				barsetline_base = barsetline_base_old
			end
			barsets[usu_ano_ini] = (barsets[usu_ano_ini] or "") ..
									string.format(barsetline_base,usu_data_ini,usu_data_fim,usu,usu)
		end
		pos = pos + 1
	end

	local bardata_content = bardata
	local plotdata_content = plotdata
	local barset_content = ""
	for ano=ano_inicio,ano_fim do
		bardata_content = bardata_content .. string.format(bardata_base,ano,ano)
		plotdata_content = plotdata_content .. string.format(plotdata_base,ano,data_inicio,prefixo_barra,ano)
		barset_content = barset_content .. string.format(barset_base,ano)
		barset_content = barset_content .. ( barsets[ano] or "" )
		barset_content = barset_content .. barset_sep
	end

	local param = ""
	param = param .. timeline_header
	param = param .. string.format(period,data_inicio,data_fim)
	param = param .. string.format(scalemajor,data_inicio)
	param = param .. string.format(scaleminor,data_inicio)
	param = param .. bardata_content
	param = param .. plotdata_content
	param = param .. barset_content

	return frame:callParserFunction( '#tag:timeline', param )
end

function extraimandato(csvline)
	_, _, usu_ini, usu_fim, usu = string.find(csvline,"^%s*([^;]-)%s*;%s*([^;]-)%s*;%s*([^;]-)%s*$")
	
	if usu_ini then
		usu_data_ini, usu_ano_ini = extraidata(usu_ini)
	end
	if usu_fim then
		if ( usu_fim == "today" ) or ( usu_fim == "end" ) then
			active = true
		else
			active = false
		end
		usu_data_fim, usu_ano_fim = extraidata(usu_fim)
	end
	if usu then
		-- remove espacos do final
		usu = string.gsub(usu,"%s*$","")
	end
	
	return usu_data_ini, usu_ano_ini, usu_data_fim, usu_ano_fim, usu, active
end

function extraidata(data)
	if data == "today" then
		-- data atual
		data = os.date("%d/%m/%Y")
	elseif data == "end" then
		-- data final do gráfico
		data = data_fim
	end
		
	_, _, dia, mes, ano = string.find(data,"(%d+)/(%d+)/(%d+)")
	datacompleta = string.format('%.2d/%.2d/%.4d',dia,mes,ano)
	return datacompleta, tonumber(ano)
end

return p