package br.dsc.upe.poli.mvc;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import javax.servlet.*;
import javax.servlet.http.*;

import br.dsc.upe.poli.basicas.Acerto;
import br.dsc.upe.poli.basicas.Resposta;
import br.dsc.upe.poli.dao.AtividadeDAO;
import br.dsc.upe.poli.dao.RespostaAlunoDAO;
import flexjson.JSONSerializer;

/**
 * Servlet implementation class SubmeteResposta
 */
public class SubmeteResposta extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public SubmeteResposta() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String operacao = request.getParameter("operacao");
		
		if ((operacao == "resposta") || operacao.equals("resposta")) {
			
			
			
			HashMap<String, String> perguntas_respostas_esperadas = getRespostasEsperadas(request);
			Resposta resposta = capturaParametros(request);
			HashMap<String, String> perguntas_respostas_enviadas = resposta.getPerguntas_respostas();
			
			Iterator<String> iterator = perguntas_respostas_esperadas.keySet().iterator();
			HashMap<String, ArrayList<Acerto>> comparacao_respostas = new HashMap<String, ArrayList<Acerto>>();
			int i = 0;
			boolean existeErro = false;
			ArrayList<Acerto> acertos = new ArrayList<Acerto>();
			while(iterator.hasNext()){
				i++;
				String chave = (String)iterator.next();
				
				if(perguntas_respostas_esperadas.get(chave).equalsIgnoreCase(perguntas_respostas_enviadas.get(chave))){
					Acerto acerto = new Acerto("resposta"+i,"correta");
					acertos.add(acerto);
				}else{
					existeErro = true;
					Acerto acerto = new Acerto("resposta"+i,"errada");
					acertos.add(acerto);
				}
			}
			comparacao_respostas.put("comparacao", acertos);
			if(existeErro){
				System.out.println("vai mandar o erro ");
				JSONSerializer serializer = new JSONSerializer();
				response.setCharacterEncoding("UTF-8");
				response.getWriter().write(serializer.serialize(comparacao_respostas));
				
				
			}else{
				
				try {
					RespostaAlunoDAO respostaAlunoDAO = new RespostaAlunoDAO();
					respostaAlunoDAO.cadastrar(resposta);
					response.getWriter().write("OK");
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			

		}
	}

	private HashMap<String, String> getRespostasEsperadas(HttpServletRequest request) {
		HashMap<String, String> perguntas_respostas_esperadas = new HashMap<String, String>();
		try {
			String nomeAtividade = request.getParameter("nomeAtividade");
			AtividadeDAO atividadeDAO;
			atividadeDAO = new AtividadeDAO();
			perguntas_respostas_esperadas = atividadeDAO.getRespostaAtividade(nomeAtividade); 
			return perguntas_respostas_esperadas;
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return perguntas_respostas_esperadas;
	}

	private Resposta capturaParametros(HttpServletRequest request) {
		HashMap<String, String> perguntas_respotas = new HashMap<String, String>();
		int quantidade = Integer.parseInt(request.getParameter("quantidade"));

		for (int i = 1; i < quantidade; i++) {
			String pergunta = request.getParameter("pergunta" + i);
			String resposta = request.getParameter("resposta" + i);
			perguntas_respotas.put(pergunta, resposta);
		}
		String perguntaopiniao = request.getParameter("perguntaopiniao1");
		String respostaopiniao = request.getParameter("respostaopiniao1");
		perguntas_respotas.put(perguntaopiniao, respostaopiniao);
		String logado = request.getParameter("logado");
		String nomeAtividade = request.getParameter("nomeAtividade");
		Resposta resp = new Resposta(logado, nomeAtividade, perguntas_respotas);

		return resp;
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}
