package us.deans.parrot.redbird;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//import org.apache.log4j.Logger;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

import us.deans.parrot.ParrotManager;

// import us.deans.parrot.redbird.data.ExperienceDataSet;
import us.deans.parrot.dataprovider.ExperienceDataSet;


@WebServlet("/resume")
public class RedbirdController extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

	private ParrotManager appConfig;
	// private Logger logger = Logger.getLogger(this.getClass());
	private Logger logger = LogManager.getLogger(this.getClass());
	
	//private ArrayList<ContractRecord> contracts= null;
	private ExperienceDataSet experience = null;								// wrapper for contracts (to make the JSP easier)
	
    public RedbirdController() {
        super();
    }

    public void init(ServletConfig config) throws ServletException {
 
    	super.init(config);
    	
    	logger.debug(">> initializing RedbirdController.");
    	
    	ServletContext ctx = null;
    	String configFile = "";
    	
    	// get configuration file through the servlet context. 
    	try {
    		ctx = getServletContext();
    		configFile = ctx.getRealPath("/WEB-INF/parrot.properties"); 
    	} 
    	catch (Exception ex) {
    		ex.printStackTrace();
    	}
    	
    	// appConfig = RedbirdManager.getInstance();
    	appConfig = ParrotManager.getInstance();
    	appConfig.init(configFile);
    	
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String SQL1 = "";
		String SQL2 = "";
		String SQL3 = "";
		
		// mutually exclusive options...
		
		if (request.getParameterMap().isEmpty()) {
			redirect(request, response, "default.html");
		}
		else {
			
			while (true) {
				
				if (request.getParameterMap().containsKey("exit")) {
					redirect(request, response, "views/exit.jsp");
					break;
				}
				
				
		    	//appConfig = ParrotManager.getInstance();
		    	
				try {
					SQL1 = appConfig.getSQL_ListExperience(); 
					logger.debug("SQL1 check >> " + SQL1);
					
					SQL2 = appConfig.getSQL_DescExperience();
					logger.debug("SQL2 check >> " + SQL2);
					
					SQL3 = appConfig.getSQL_ListSkillSet();
					logger.debug("SQL3 check >> " + SQL3);
					
				}
				catch (Exception ex) {
					System.out.println(ex.getMessage()); 
				}
				
				
				// load up the data...
				
				experience = new us.deans.parrot.dataprovider.ExperienceDataSet();
				experience.loadData(SQL1, SQL2, SQL3);
				
				
				if (request.getParameterMap().containsKey("jsp")) {
					// redirect to jsp
					request.setAttribute("experience", experience);
					logger.debug("got " + experience.count() + " records of data, redirecting to view now...");
					redirect(request, response, "views/resume.jsp");
					break;
				}

				if (request.getParameterMap().containsKey("birt")) {
					// redirect to birt
					request.setAttribute("experience", experience);
					logger.debug("redirecting to birt page...");
					redirect(request, response, "views/birt_placemark.jsp");
					break;
				}
				
				break;
			}
			
		}
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doGet(request, response);

	}	

	private void redirect(HttpServletRequest request, HttpServletResponse response, String url) {
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		
		try {
			dispatcher.forward(request, response);
		} catch (ServletException | IOException e) {
			logger.debug("dispatcher.forward - not working. See stack trace...");
			e.printStackTrace();
		}
	}
	
}
