package agilpizza.servlet;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import agilpizza.dao.ClienteDAO;
import agilpizza.modelo.Cliente;

public class IdentificacaoServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		String telefone = (String) req.getParameter("telefone");
		if(telefone != null){
			telefone.trim();
			//RETIRA O TRAÇO DO MEIO APENAS UMA VEZ
			//(EM CASO DO USUÁRIO COLOCAR DOIS TRAÇOS, OU MESMO EM POSIÇÕES INVÁLIDAS)
			if ((telefone.length() == 9) && (telefone.charAt(4) == '-'))
				telefone.replace("-", "");
				//telefone = telefone.substring(0,3) + telefone.substring(5);
			if ((telefone.length() == 8) && (telefone.charAt(3) == '-'))
				//telefone = telefone.substring(0, 2) + telefone.substring(4);
				telefone.replace("-", "");
		}
		String email = (String) req.getParameter("email");

		Cliente cliente;
		try {
			cliente = buscaCliente(telefone, email);
		} catch (Exception e) {
			req.getSession().setAttribute("mensagem", e.getMessage());
			resp.sendRedirect("erro.jsp");
			return;
		}

		Boolean listaNegra = false;
		if (req.getParameter("listaNegra") != null) {
			listaNegra = true;
		}

		if (cliente == null) {
			req.getSession().setAttribute("telefone", telefone);
			req.getSession().setAttribute("email", email);
			if (!listaNegra) {
				resp.sendRedirect("endereco.jsp");
			} else {
				resp.sendRedirect("enderecoListaNegra.jsp");
			}
		} else {
			if (!listaNegra) {
				req.getSession().setAttribute("cliente", cliente);
				resp.sendRedirect("mostraEndereco.jsp");
			} else {
				cliente.setInadimplente(true);
				resp.sendRedirect("listaNegra.jsp");
			}
		}
	}

	private Cliente buscaCliente(String telefone, String email)
			throws Exception {

		ServletContext context = getServletContext();
		ClienteDAO clienteDao = (ClienteDAO) context.getAttribute("clienteDao");
		if (clienteDao == null) {
			clienteDao = new ClienteDAO();
			context.setAttribute("clienteDao", clienteDao);
		}

		Cliente cliente;
		if (ValidacaoUtil.validaTelefone(telefone)) {
			cliente = clienteDao.procuraClientePorTelefone(telefone);
		} else if (!ValidacaoUtil.isVazio(email)) {
			cliente = clienteDao.procuraClientePorEmail(email);
		} else {
			String mensagem;
			if (ValidacaoUtil.isVazio(telefone) || ValidacaoUtil.isVazio(email))
				mensagem = "Telefone ou email são obrigatórios";
			else
				mensagem = "Número de telefone incorreto.";
			throw new Exception(mensagem);
		}
		return cliente;
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doGet(req, resp);
	}

}
