-- Se encarga de registrar los votos, enviarlo al servidor y recibir los resultados
require 'tcp'

local resp = 0
local colorev = 1

function handler (evt)
	-- EJECUCION INICIAL DE LA APLICACION LUA
	if evt.class == 'ncl' and evt.type == 'presentation' and evt.action == 'start' then
		canvas:attrColor('white')-- Seteamos el color del pincel
		canvas:attrFont('Tiresias', 20, 'bold')-- Seteamos los atributos de la letra
		canvas:drawText(10, 230, "Selecciones una Alternativa:")--Escribimos
		canvas:flush()-- Actualizamos la pantalla
	end
	
	-- EJECUCION EN EL CASO EN QUE SE PRESIONE UNA TECLA
	if evt.class == 'ncl' and evt.type == 'attribution' and evt.name == 'cuenta' then 
		
		-- Para desplejar el color seleecionado
		if evt.value=="1" then
			colorev = "rojo"
		end
		if evt.value=="2" then
			colorev = "verde" 
		end
		if evt.value=="3" then
			colorev = "amarillo"
		end
		if evt.value=="4" then
			colorev = "azul"
		end
		
		-- Para informar sobre la seleccion
		canvas:attrColor('white')
		canvas:clear()
		canvas:attrFont('Tiresias', 20, 'bold')
		canvas:drawText(10, 230, "La Alternativa seleccionada es:")
		texto = evt.value
		canvas:attrFont('vera', 30, 'bold')
		canvas:drawText(130, 270, colorev)

		-- Actualizamos la pantalla
		canvas:flush()
	end
	
	-- EJECUCION PARA EL CASO QUE PASEN LOS 20 SEGUNDOS
	if evt.class == 'ncl' and evt.type == 'attribution' and evt.name == 'tiempolim' then 
		
		-- Información de la selección
		canvas:attrColor('white')
		canvas:clear()
		canvas:attrFont('Tiresias', 20, 'bold')
		canvas:drawText(10, 230, "Respuesta enviada:")
		canvas:attrFont('vera', 30, 'bold')
		canvas:drawText(130, 270, colorev)
		canvas:flush()
		
		-- Enviando el resultado al servidor
		local host = "www2.elo.utfsm.cl"
		tcp.execute(
			function ()
				--Conectando al servidor
				tcp.connect(host, 80)
				-- ENVIANDO EL VOTO
				local url = "GET http://"..host.."/~elo323/survey/set_vote.php?opt="..texto
				--envio del voto al servidor
				tcp.send(url)
				tcp.disconnect()
				
				--RECONECTADO al servidor para obtener el numero de la pregunta, esto se hace denuevo porque puede ocurrir el caso en que entre los
				-- 20 segundo de espera la pregunta cambie y para obtener el resultado de necesita en NUMERO DE LA PREGUNTA.
				tcp.connect(host, 80)
				--Se realiza peticion de la pregunta y las alternativas al host
				local url = "GET http://"..host.."/~elo323/survey/get_question.php"	
				tcp.send(url)
				tcp.send("\n")
				local result = nil
				result = tcp.receive()
				if result then			
					_,_,numquest = string.find(result, "<askid>(.*)</askid>")
					canvas:flush()
				else
					if evt.error ~= nil then 
						result = 'error: ' .. evt.error
					end
				end
				tcp.disconnect()
				
				--RECONECTANDO al servidor para obtener los RESULTADO
				tcp.connect(host, 80)
				--Se realiza peticion de la pregunta y las alternativas al host
				local url = "GET http://"..host.."/~elo323/survey/get_results.php"	
				tcp.send(url)
				tcp.send("\n")
				local result = nil
				--Se obtiene respuesta del servidor
				result = tcp.receive()
				--writeText("obteniendo resultados...")
				if result then			
					_,_,respuestas = string.find(result, "<askid t="..numquest..">(.*)</askid>") --Resultados
					_, _,Resp1,Resp2,Resp3,Resp4 = string.find(respuestas, "(%d+),(%d+),(%d+),(%d+)") --Obteniendo los votos de cada alternativa

					-- Escribir el resultado en porcentajes y con grafico.
					canvas:attrFont('Tiresias', 20, 'bold')
					local total = Resp1 + Resp2 + Resp3 + Resp4
					Resp1 = math.floor(Resp1/total*1000)/10
					Resp2 = math.floor(Resp2/total*1000)/10
					Resp3 = math.floor(Resp3/total*1000)/10
					Resp4 = math.floor(Resp4/total*1000)/10
					local largo_barra = 100;
					local maxresul = math.max(Resp1,Resp2,Resp3,Resp4)
					local l1 = largo_barra*Resp1/maxresul
					local l2 = largo_barra*Resp2/maxresul
					local l3 = largo_barra*Resp3/maxresul
					local l4 = largo_barra*Resp4/maxresul
					canvas:attrColor('red')
					canvas:drawRect("fill", 210,330,l1,20)
					canvas:attrColor('green')
					canvas:drawRect("fill", 210,360,l2,20)
					canvas:attrColor('yellow')
					canvas:drawRect("fill", 210,390,l3,20)
					canvas:attrColor('blue')
					canvas:drawRect("fill", 210,420,l4,20)
					canvas:attrColor('white')
					canvas:drawText(10, 330, "Respuesta A: "..Resp1.."%")
					canvas:drawText(10, 360, "Respuesta B: "..Resp2.."%")
					canvas:drawText(10, 390, "Respuesta C: "..Resp3.."%")
					canvas:drawText(10, 420, "Respuesta D: "..Resp4.."%")
					canvas:flush()
				else	
					if evt.error ~= nil then 
						result = 'error: ' .. evt.error
					end
				end
				tcp.disconnect()
			
			end
		)
		
	end
end

event.register(handler)

