package educacion;

import java.io.*;


import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


/**
 * Servlet implementation class for Servlet: Evaluacion
 *
 */
 public class Evaluacion extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	 
	 static final long serialVersionUID = 0;
	 
	public Evaluacion() {
		super();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request,response);
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//private static Connection conDB = null;
		//private static String DBUrl;

		//Recogemos la operacion enviada por el formulario
		String operacion = request.getParameter("operacion");
		
		HttpSession session= request.getSession(true);
		
		UsuarioBean u = (UsuarioBean)session.getAttribute("usuario");
		String idUsuario=u.getIdUsuario();
		
		String pagina="examen.jsp";
		
		/*
		 * Si la operacion es hacerEvaluacion, recogemos el identificador de la evaluacion 
		 * que se quiere hacer
		 */
		if (operacion.equals("hacerEvaluacion")){	
			
			EvaluacionBean e = new EvaluacionBean();
			int idEvaluacion=0;
			int numeroEvaluaciones=e.numeroEvaluaciones();
			int i=1;
			String evaluacion= request.getParameter("evaluacion");
			
			while(i!=numeroEvaluaciones+1){
				String j=String.valueOf(i);
				if(evaluacion.equals(j)){
					idEvaluacion=i;
				}
				i++;
			}
				
			//Recogemos el nombre de la evaluacion seleccionada
			String nombre=e.getNombreEvaluacion(idEvaluacion);
			
			//Almacenamos los datos de esta evaluacion para luego guardarlos en el atributo evaluacion de sesion
			e.setNombreEvaluacion(nombre);
			e.setIdEvaluacion(idEvaluacion);
			e.setIdUsuario(idUsuario);
			
			
			session.setAttribute("evaluacion",e);
			
			//El servlet nos devolvera a la pagina examen.jsp
			pagina="examen.jsp";
		}
		
		/*
		 * Si la operacion es enviarResultados (tras haber realizado el examen)comprobaremos
		 * si las respuestas son correctas 
		 */ 
		if(operacion.equals("enviarResultados")){	
			
			EvaluacionBean e = (EvaluacionBean)session.getAttribute("evaluacion");
			
			//numero de preguntas de la evaluacion.			
			int idEvaluacion=e.getIdEvaluacion();
			int numeroPreguntas=e.numeroPreguntas(idEvaluacion);
		
			//leemos las respuestas
			String opcion1 = request.getParameter("opcion1");
			String opcion2 = request.getParameter("opcion2");
			String opcion3 = request.getParameter("opcion3");
			String opcion4 = request.getParameter("opcion4");
			String opcion5 = request.getParameter("opcion5");
			String opcion6 = request.getParameter("opcion6");
			String opcion7 = request.getParameter("opcion7");
			String opcion8 = request.getParameter("opcion8");
			
			int i=0, enviada=0;
			int[] errores=new int[numeroPreguntas];
			int puntuacion=0;
			int preguntas[]=e.getPreguntas(idEvaluacion);
			int correcta;
			int[] referencias=new int [numeroPreguntas];
						
			while (i!=numeroPreguntas){
				/* Almacenamos en un vector si en cada pregunta hay error o no
				 * si hay error en la posicion de la pregunta almacenamos un 1 
				 * sino lo hay un 0.
				 */
				int idPregunta=preguntas[i];
				correcta=e.getCorrecta(idPregunta);
				referencias[i]=e.getReferencia(idPregunta);
				
				if(i==0){
					
					if(opcion1.equals("1")){enviada=1;}
					if(opcion1.equals("2")){enviada=2;}
					if(opcion1.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;

					}else{
						puntuacion++;
						errores[i]=0;
					}
					
				}
				if(i==1){
					if(opcion2.equals("1")){enviada=1;}
					if(opcion2.equals("2")){enviada=2;}
					if(opcion2.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				
				if(i==2){
					if(opcion3.equals("1")){enviada=1;}
					if(opcion3.equals("2")){enviada=2;}
					if(opcion3.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				if(i==3){
					if(opcion4.equals("1")){enviada=1;}
					if(opcion4.equals("2")){enviada=2;}
					if(opcion4.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				
				if(i==4){
					if(opcion5.equals("1")){enviada=1;}
					if(opcion5.equals("2")){enviada=2;}
					if(opcion5.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				
				if(i==5){
					if(opcion6.equals("1")){enviada=1;}
					if(opcion6.equals("2")){enviada=2;}
					if(opcion6.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				
				if(i==6){
					if(opcion7.equals("1")){enviada=1;}
					if(opcion7.equals("2")){enviada=2;}
					if(opcion7.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				
				if(i==7){
					if(opcion8.equals("1")){enviada=1;}
					if(opcion8.equals("2")){enviada=2;}
					if(opcion8.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				
				i++;	
			}
			
			e.setErrores(errores);
			e.setReferenciasError(referencias);
			
			//Comprobamos si la evaluacion ya ha sido realizada por el usuario
			if(e.isRealizada(idEvaluacion, idUsuario)){
//				Incrementamos el numero de intentos de este usuario para esta evaluacion
				int intentos=e.getIntentos(idEvaluacion, idUsuario);			
				intentos++;
				//Si ha sido ya realizada actualizamos la entrada en la tabla para que no se repita
				e.actualizarResultado(idUsuario, intentos, puntuacion, idEvaluacion);
			}
			else{
				//Sino se ha realizado nunca introducimos la nueva entrada
				e.setTablaResultado(idUsuario, 1, puntuacion, idEvaluacion);
			}
			
			//Almacenamos todo en el atributo evaluacion de la sesion
			session.setAttribute("evaluacion",e);
			
			//El servlet nos devolvera a la pagina resultado.jsp
			pagina="resultado.jsp";
		}
		
		/*
		 * Si la operacion es enviarResultados (tras haber realizado el examen)comprobaremos
		 * si las respuestas son correctas 
		 */ 
		if(operacion.equals("enviarResultadosAleatorios")){	
			
			EvaluacionBean e = (EvaluacionBean)session.getAttribute("evaluacion");
			
			int[] preguntas=e.getPreguntasAleatorias();
			int numeroPreguntas=preguntas.length;
		
			//leemos las respuestas
			String opcion1 = request.getParameter("opcion1");
			String opcion2 = request.getParameter("opcion2");
			String opcion3 = request.getParameter("opcion3");
			String opcion4 = request.getParameter("opcion4");
			String opcion5 = request.getParameter("opcion5");
			
			int idEvaluacion=e.getIdEvaluacion();
			
			int i=0, enviada=0;
			int[] errores=new int[5];
			int puntuacion=0;
			int correcta;
			int[] referencias=new int [5];
						
			while (i!=numeroPreguntas){
				/* Almacenamos en un vector si en cada pregunta hay error o no
				 * si hay error en la posicion de la pregunta almacenamos un 1 
				 * sino lo hay un 0.
				 */
				int idPregunta=preguntas[i];
				correcta=e.getCorrecta(idPregunta);
				referencias[i]=e.getReferencia(idPregunta);
				
				if(i==0){
					
					if(opcion1.equals("1")){enviada=1;}
					if(opcion1.equals("2")){enviada=2;}
					if(opcion1.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;

					}else{
						puntuacion++;
						errores[i]=0;
					}
					
				}
				if(i==1){
					if(opcion2.equals("1")){enviada=1;}
					if(opcion2.equals("2")){enviada=2;}
					if(opcion2.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				
				if(i==2){
					if(opcion3.equals("1")){enviada=1;}
					if(opcion3.equals("2")){enviada=2;}
					if(opcion3.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				if(i==3){
					if(opcion4.equals("1")){enviada=1;}
					if(opcion4.equals("2")){enviada=2;}
					if(opcion4.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}
				
				if(i==4){
					if(opcion5.equals("1")){enviada=1;}
					if(opcion5.equals("2")){enviada=2;}
					if(opcion5.equals("3")){enviada=3;}
					if(correcta!=enviada){
						errores[i]=1;
					}else{
						puntuacion++;
						errores[i]=0;
					}
				}	
				i++;	
			}

			e.setErrores(errores);
			e.setReferenciasError(referencias);
			
			//Comprobamos si la evaluacion ya ha sido realizada por el usuario
			if(e.isRealizada(idEvaluacion, idUsuario)){
				int intentos=e.getIntentos(100,idUsuario);
				intentos++;
				//Si ha sido ya realizada actualizamos la entrada en la tabla para que no se repita
				e.actualizarResultado(idUsuario, intentos, puntuacion, idEvaluacion);
			}
			else{
				//Sino se ha realizado nunca introducimos la nueva entrada
				e.setTablaResultado(idUsuario, 1, puntuacion, idEvaluacion);
			}
			
			//Almacenamos todo en el atributo evaluacion de la sesion
			session.setAttribute("evaluacion",e);
			
			//El servlet nos devolvera a la pagina resultado.jsp
			pagina="resultado.jsp";
		}
		
		
     	RequestDispatcher dispatcher = request.getRequestDispatcher(pagina);
		dispatcher.forward(request, response); 
		//Conexion.desconecta();
	}  
}   	  	    

