package servlets;

import java.io.IOException;
import java.util.List;

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

import business.Aluno;
import dao.FacadeDAO;

public class AlunoServlet extends javax.servlet.http.HttpServlet implements
		javax.servlet.Servlet {
	private static final long serialVersionUID = 1L;

	// Métodos
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String comando = request.getParameter("comando");

		if (comando != null) {
			if (comando.equals("inserir")) {
				comandoInserir(request, response);
			} else if (comando.equals("remover")) {
				comandoRemover(request, response);
			} else if (comando.equals("listar")) {
				comandoListar(request, response);
			}
		}

	}

	public void comandoInserir(HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		// Recupera os Parâmetros
		String nome = request.getParameter("nome");
		String matr = request.getParameter("matr");

		// Cria um Aluno com os Parâmetros
		Aluno al = new Aluno();
		al.setNome(nome);
		al.setMatricula(matr);

		// Insere o Aluno no Banco
		// //dao.inserir(al);
		FacadeDAO.getInstance(this).getAlunoDAO().adicionarAluno(al);

		// Avisa o Usuário
		response.sendRedirect("alunoInserir.jsp?msg=Aluno Inserido.");
	}

	public void comandoRemover(HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		// Recupera os parâmetros
		String matr = request.getParameter("matr");
		String origem = request.getParameter("origem");

		// Remove o aluno
		// if(dao.removerPorMatricula(matr))
		int mat = Integer.parseInt(matr);
		String msg = FacadeDAO.getInstance(this).getAlunoDAO().removerAluno(mat);
		if (msg == null) {
			// Testa pela origem
			if (origem.equals("formulario"))
				response.sendRedirect("alunoRemover.jsp?msg=Aluno Removido.");
			else if (origem.equals("lista"))
				comandoListar(request, response);
		} else
			response.sendRedirect("alunoRemover.jsp?msg=Aluno Inexistente.");
	}

	public void comandoListar(HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		// Pede os alunos para o DAO
		// ArrayList lista = dao.listar();
		List<Aluno> lista = FacadeDAO.getInstance(this).getAlunoDAO().listarAlunos();

		// Guarda como atributo de requisição
		request.setAttribute("lista", lista);

		// Redireciona a requisição internamente para a página
		RequestDispatcher rd = request.getRequestDispatcher("alunoListar.jsp");
		rd.forward(request, response);
	}
}