package com.eassessment.controller;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.eassessment.model.AdminDao;
import com.eassessment.model.AssessmentModel;
import com.eassessment.model.CoordinateDao;
import com.eassessment.pojo.AnswerSet;
import com.eassessment.pojo.TestSet;
import com.eassessment.util.Constants;
import com.eassessment.util.StringUtil;

/**
 * Servlet implementation class AssessmentTest
 */
public class AssessmentTest extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public AssessmentTest() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {

	}

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String testType = request.getParameter("actionbutton").equals(
				Constants.START_TEST_REAL) ? Constants.TEST_REAL
				: Constants.TEST_DEMO;
		int currentq = 1;

		/**
		 * collect questions for test
		 */
		Map<Integer, TestSet> qmap = AssessmentModel.getTestData();
		// System.out.println("qmap map="+qmap);
		Map<Integer, AnswerSet> ansmap = new HashMap<Integer, AnswerSet>();
		String user_id = request.getSession().getAttribute("userid").toString();

		int status = testType.equals(Constants.TEST_REAL) ? AdminDao
				.getInstance().getUser(user_id).getStatus() : AdminDao
				.getInstance().getUser(user_id).getDemostatus();

		if (status == Constants.PENDING_APROVAL && testType.equals(Constants.TEST_REAL)) {
			request.setAttribute("message",
					StringUtil.setErrorMessage("Wait for Approval..."));
			RequestDispatcher rd = request
					.getRequestDispatcher("StudentHome.jsp");
			rd.forward(request, response);
			return;
		} else if (status == 2) {
			request.setAttribute(
					"message",
					StringUtil.setErrorMessage("You already given test!"));
			RequestDispatcher rd = request
					.getRequestDispatcher("StudentHome.jsp");
			rd.forward(request, response);
			return;
		} 

		if (qmap.size() > currentq && qmap.containsKey(currentq)) {
			currentq = 1;
			request.setAttribute("testsetObj", qmap.get(currentq));
			// System.out.println("==>"+qmap.get(currentq).getOptionList());
			request.setAttribute("currentq", currentq);

			HttpSession session = request.getSession();
			session.setAttribute("questionset", qmap);
			session.setAttribute("answerset", ansmap);
			session.setAttribute("totalq", testType.equals(Constants.TEST_DEMO)?5: qmap.size());
			session.setAttribute("testtype", testType);

			RequestDispatcher rd = request
					.getRequestDispatcher("AssessmentTest.jsp");
			rd.forward(request, response);
		} else {
			RequestDispatcher rd = request
					.getRequestDispatcher("AssessmentTest.jsp");
			rd.include(request, response);
		}

	}

}
