-- Script lua para pedir al servidor el numero de alternativas totales seleccionadas hasta el momento por el usuario, y dibujar
-- un grafico de barras con los porcentajes de cada una

require 'tcp'							-- Requiere el modulo tcp lua para funcionar

function writeText(text)				-- Funcion para desplegar texto en la pantalla 
   canvas:attrColor(0,0,20,0)
   canvas:attrFont("in_font", 24)
   canvas:drawText(10, 0, text)
   canvas:flush()
end

function draw_plot(resultA,resultB,resultC,resultD) 		-- Funcion para dibujar la grafica que despliega los resultados de la pregunta
	resultTotal = resultA+resultB+resultC+resultD			-- resultX tiene la cantidad de votos por la alternativa X
	resultA_por = math.floor(((resultA/resultTotal)*100)+0.5)	-- Resultados porcentuales por alternativa
	resultB_por = math.floor(((resultB/resultTotal)*100)+0.5)
	resultC_por = math.floor(((resultC/resultTotal)*100)+0.5)
	resultD_por = math.floor(((resultD/resultTotal)*100)+0.5)
	canvas:attrColor(0,0,20,0)
	canvas:drawRect('fill',470,93-resultA_por,30,resultA_por) -- Dibujar las barras del gráfico
	canvas:drawRect('fill',570,93-resultB_por,30,resultB_por)
	canvas:drawRect('fill',670,93-resultC_por,30,resultC_por)
	canvas:drawRect('fill',770,93-resultD_por,30,resultD_por)
	canvas:attrFont("in_font", 20)
	canvas:drawText(460,93,"A: "..resultA_por.."%")		-- Escribir el porcentaje correspondiente a cada barra del gráfico
	canvas:drawText(560,93,"B: "..resultB_por.."%")
	canvas:drawText(660,93,"C: "..resultC_por.."%")
	canvas:drawText(760,93,"D: "..resultD_por.."%")
	canvas:flush()
end

local function bg_draw()					-- Funcion para desplegar el fondo del gráfico de barras
	local img = canvas:new('gray.jpg')
	canvas:compose(0, 0, img)
	canvas:flush()
end

local function winHandler (evt)
	if evt.class == "ncl" and evt.type == "presentation" then 				-- Se revisa que el formato del evento sea coherente
		if (evt.action == 'start') then										
		bg_draw()															-- Se dibuja el fondo del gráfico
		local host = "www2.elo.utfsm.cl"								    -- Se especifica el host como "www2.elo.utfsm.cl"
		tcp.execute(
			function ()
				tcp.connect(host, 80)													-- Se conecta al host al puerto 80 (http)
				local url = "GET http://"..host.."/~elo323/survey/get_results.php"		-- Requerimiento http para los resultados
				tcp.send(url)
				tcp.send("\n")
				--obtém todo o conteúdo da página acessada
				local result = nil
				result = tcp.receive()													-- Result guarda la informacion de resultados
				if result then
					_,_,num,resultA,resultB,resultC,resultD = string.find(result, "<askid t=(.*)>(.*),(.*),(.*),(.*)</askid>")
					draw_plot(resultA,resultB,resultC,resultD)	-- Se parsea el string para guardar en forma individual el numero de respuestas por alternativa y se dibuja el grafico
					--canvas:flush()
				else																						
					writeText("Error al recibir datos de conexion TCP")
					if evt.error ~= nil then 
						result = 'error: ' .. evt.error
					end
				end
				tcp.disconnect()														-- Termino de conexion
			end
		)
		end
	end
end
event.register(winHandler)

