package com.eassessment.controller;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
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.util.Email;
import com.eassessment.util.PasswordGenerator;
import com.eassessment.util.StringUtil;
import com.eassessment.model.AdminDao;
import com.eassessment.pojo.User;
import com.eassessment.util.Constants;
import com.sun.org.apache.bcel.internal.generic.NEW;

/**
 * Servlet implementation class NewRegistration
 */
public class NewRegistration extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public NewRegistration() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		User user = new User();
		List<String> listError = new ArrayList<String>();
		PrintWriter out = response.getWriter();

		String name, phone, email, city, country, institute, username, password;

		name = request.getParameter("name");
		phone = request.getParameter("phone");
		email = request.getParameter("email");
		city = request.getParameter("city");
		country = request.getParameter("country");
		institute = request.getParameter("institute");
		username = request.getParameter("username");
		

		if(name==null || name.equals("")){
			request.setAttribute("message",
					StringUtil.setErrorMessage("Please enter name"));
			forwordRequest(request, response);
			return;
		}
		
		if(email==null || email.equals("")){
			request.setAttribute("message",
					StringUtil.setErrorMessage("Please enter email"));
			forwordRequest(request, response);
			return;
		}
		if(phone==null || phone.equals("")){
			request.setAttribute("message",
					StringUtil.setErrorMessage("Please enter phone"));
			forwordRequest(request, response);
			return;
		}
		if(city==null || city.equals("")){
			request.setAttribute("message",
					StringUtil.setErrorMessage("Please enter city"));
			forwordRequest(request, response);
			return;
		}
//		if(username==null || username.equals("")){
//			request.setAttribute("message",
//					StringUtil.setErrorMessage("Please enter username"));
//			forwordRequest(request, response);
//			return;
//		}
		
		// TODO: random password generation		
//		PasswordGenerator passwordGen = new PasswordGenerator(10);
		password = Long.toHexString((new Date()).getTime());// passwordGen.getPassword().toString();
		
		user.setName(name);
		user.setPhone(phone);
		user.setEmail(email);
		user.setCity(city);
		user.setCountry(country);
		user.setInstitute(institute);
		user.setUsername(email);
		user.setPassword(password);
		user.setRole(Constants.ROLE_STUDENT);
		user.setStatus(0);
		user.setDemostatus(0);

		String responseString = AdminDao.getInstance().newRegistration(user);
		if (responseString.equals(Constants.OK)) {
			request.setAttribute("message",
					 StringUtil.setSuccessMessage(StringUtil.REGISTRATION_SUCCESS) );
			
			try {
				String filename = "/WEB-INF/newreg.txt";
				StringBuilder sb = new StringBuilder();
				ServletContext context = request.getSession().getServletContext();
				InputStream is = context.getResourceAsStream(filename);
				if (is != null) {
					InputStreamReader isr = new InputStreamReader(is);
					BufferedReader reader = new BufferedReader(isr);

					String text = "";
					while ((text = reader.readLine()) != null) {
						sb.append(text);
					}				 
					String msg="<p>Username: "+user.getUsername()+"<p>Password: "+user.getPassword();
					sb.append(msg).append(StringUtil.EMAIL_SIGNATURE);
					System.out.println("EMAIL::"+user.getUsername()+"\t"+Email.SendMailTLS(user.getEmail(), sb, user.getName().concat(StringUtil.IS_REGISTERED_SUCCESSFULLY)));
				}
					
				 
			} catch (Exception e) {
				e.printStackTrace();
			}
			
//			HttpSession session= request.getSession(true);
//			session.setAttribute("loggeduser", user.getUsername());
//			session.setAttribute("role", user.getRole());
//			session.setAttribute("userid", user.getId());
//			session.setMaxInactiveInterval(20*60);
			
			RequestDispatcher rd = request.getRequestDispatcher("FinishTest.jsp");			
			rd.forward(request, response);			 
		} else {
			request.setAttribute(
					"message",
					StringUtil.setErrorMessage("Error : Failed to save data "
							+ responseString));
			this.forwordRequest(request, response);
		}
		
	}

	private void forwordRequest(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher rd = request.getRequestDispatcher("Register.jsp");
		rd.forward(request, response);
	}

}
