private Endereco MapperHTML(string html)
        {
            const string reg    = "<span class=\"respostadestaque\">(.*?)</span><br/>";
            var          result = Regex.Matches(html, reg, RegexOptions.Singleline | RegexOptions.IgnoreCase);
            string       resultCidade;

            var endereco = new EnderecoFactory().NovoEndereco();

            switch (result.Count)
            {
            case 0:
                throw new Exception("O CEP informado não foi encontrado.");

            case 2:
                endereco.CEP         = result[1].Groups[1].Value;
                resultCidade         = result[0].Groups[1].Value.Replace("\n", string.Empty).Replace("\t", string.Empty).Trim();
                endereco.Cidade.Nome = resultCidade.Split('/')[0].Trim();
                endereco.Estado.UF   = resultCidade.Split('/')[1].Trim();
                endereco.CEPCidade   = true;
                break;

            case 4:
            case 5:
                endereco.CEP = result[3].Groups[1].Value;
                var logradouro = result[0].Groups[1].Value.Replace("\n", string.Empty).Trim();
                endereco.Logradouro  = logradouro.IndexOf('-') > 0 ? logradouro.Substring(0, logradouro.IndexOf('-') - 1) : logradouro;
                endereco.Bairro      = result[1].Groups[1].Value.Trim();
                resultCidade         = result[2].Groups[1].Value.Replace("\n", string.Empty).Replace("\t", string.Empty).Trim();
                endereco.Cidade.Nome = resultCidade.Split('/')[0].Trim();
                endereco.Estado.UF   = resultCidade.Split('/')[1].Trim();
                endereco.CEPCidade   = false;

                if (endereco.Estado.UF == "SP" && endereco.Cidade.Nome == "São Paulo")
                {
                    endereco.Zona = VerificaZonaSp(endereco.CEP);
                }
                else
                {
                    endereco.Zona = null;
                }

                break;

            default:
                throw new Exception("O CEP informado não foi encontrado.");
            }

            return(endereco);
        }
        public IActionResult AtualizarDependente(IFormCollection formCollection)
        {
            ViewData["Mensagem"] = "";
            try
            {
                var antigo = _dataService.ObterUsuarioPorId(Convert.ToInt32(formCollection["id"]));

                UsuarioFactory.ValidaEmail(formCollection["email"]);

                //SENHA
                var senha = "";

                if (!string.IsNullOrEmpty(formCollection["pass"]) && !string.IsNullOrEmpty(formCollection["repass"]))
                {
                    UsuarioFactory.CompararSenha(formCollection["pass"], formCollection["repass"]);
                    senha = formCollection["pass"];
                }

                //ENDERECO
                Endereco endereco = null;

                if (formCollection["zipCode"] != string.Empty)
                {
                    EnderecoFactory.ValidaEstado(formCollection["state"]);
                    EnderecoFactory.ValidaNumero(formCollection["numAddress"]);
                    endereco = new Endereco()
                    {
                        Logradouro  = formCollection["street"],
                        Numero      = Convert.ToInt32(formCollection["numAddress"]),
                        Complemento = formCollection["complement"],
                        Bairro      = formCollection["province"],
                        Cidade      = formCollection["city"],
                        Estado      = formCollection["state"],
                        Cep         = formCollection["zipCode"]
                    };
                }

                _dataService.AtualizarUsuario(antigo, formCollection["email"], senha, endereco, formCollection["phoneHome"], formCollection["phoneCel"]);

                DefaultFactory._mensagemViewModel.AtribuirMensagemSucesso("Dependente atualizado com sucesso.");
                return(RedirectToAction("Guests"));
            }
            catch (NewUserFailedException e)
            {
                DefaultFactory._mensagemViewModel.AtribuirMensagemErro(e.Desricao);
                return(RedirectToAction("Guests"));
            }
        }
        public IActionResult Register(IFormCollection formCollection)
        {
            try
            {
                UsuarioFactory.CompararSenha(formCollection["pass"], formCollection["repass"]);
                var cliente = new Cliente()
                {
                    Email = formCollection["email"],
                    Cpf   = formCollection["cpf"],
                    Nome  = formCollection["name"],
                    Senha = formCollection["pass"]
                };

                EnderecoFactory.ValidaEstado(formCollection["state"]);
                EnderecoFactory.ValidaNumero(formCollection["numAddress"]);
                var endereco = new Endereco()
                {
                    Logradouro  = formCollection["street"],
                    Numero      = Convert.ToInt32(formCollection["numAddress"]),
                    Complemento = formCollection["complement"],
                    Bairro      = formCollection["province"],
                    Cidade      = formCollection["city"],
                    Estado      = formCollection["state"],
                    Cep         = formCollection["zipCode"]
                };
                cliente.AdicionarEndereco(endereco);

                _dataService.AdicionarCliente(cliente, formCollection["phoneHome"], formCollection["phoneCel"]);

                _dataService.EnviarEmail("0", cliente);

                DefaultFactory._mensagemViewModel.AtribuirMensagemSucesso($"Usuário {cliente.Email} cadastrado com sucesso. Aguarde o contato do administrador do sistema.");
                DefaultFactory._mensagemViewModel.Operacao = "Criar usuario";
                return(RedirectToAction("Register"));
            }
            catch (EmailFailedException e)
            {
                DefaultFactory._mensagemViewModel.AtribuirMensagemSucesso($"O usuário foi cadastrado com sucesso, porém o e-mail não foi enviado para o administrador do sistema. Favor entrar em contato solicitando a liberação do usuário.");
                DefaultFactory._mensagemViewModel.Operacao = "Criar usuario";
                return(RedirectToAction("Register"));
            }
            catch (NewUserFailedException e)
            {
                DefaultFactory._mensagemViewModel.AtribuirMensagemErro(e.Desricao);
                DefaultFactory._mensagemViewModel.Operacao = "Criar Usuário";
                return(RedirectToAction("Register"));
            }
        }
        public IActionResult AdicionarDependente(IFormCollection formCollection)
        {
            try
            {
                Dependente dependente = new Dependente();
                var        usuario    = _dataService.ObterUsuarioSessao();

                if (_dataService.TipoCliente(usuario) == "Dependente")
                {
                    throw new NewUserFailedException("Este usuário é um dependente. Dependentes não podem possuir dependentes.");
                }
                else
                {
                    dependente.Cliente = (Cliente)usuario;
                }

                dependente.Email = formCollection["email"];
                dependente.Nome  = formCollection["name"];
                UsuarioFactory.CompararSenha(formCollection["pass"], formCollection["repass"]);
                dependente.Senha = formCollection["pass"];

                //ENDERECO
                if (formCollection["zipCode"] != string.Empty)
                {
                    EnderecoFactory.ValidaEstado(formCollection["state"]);
                    EnderecoFactory.ValidaNumero(formCollection["numAddress"]);
                    dependente.Endereco = new Endereco()
                    {
                        Logradouro  = formCollection["street"],
                        Numero      = Convert.ToInt32(formCollection["numAddress"]),
                        Complemento = formCollection["complement"],
                        Bairro      = formCollection["province"],
                        Cidade      = formCollection["city"],
                        Estado      = formCollection["state"],
                        Cep         = formCollection["zipCode"]
                    };
                }
                else
                {
                    dependente.Endereco = null;
                }

                _dataService.AdicionarDependente(dependente, formCollection["phoneHome"], formCollection["phoneCel"]);
                _dataService.EnviarEmail("2", dependente);

                DefaultFactory._mensagemViewModel.AtribuirMensagemSucesso($"Dependente adicionado para o usuário {dependente.Cliente.Email} com sucesso.");
                DefaultFactory._mensagemViewModel.Operacao = "Adicionar Dependente";
                return(RedirectToAction("Guests"));
            }
            catch (NewUserFailedException e)
            {
                DefaultFactory._mensagemViewModel.AtribuirMensagemErro(e.Desricao);
                DefaultFactory._mensagemViewModel.Operacao = "Adicionar Dependente";
                return(RedirectToAction("Guests"));
            }
            catch (EmailFailedException e)
            {
                DefaultFactory._mensagemViewModel.AtribuirMensagemSucesso($"Dependente adicionado com sucesso.");
                DefaultFactory._mensagemViewModel.Operacao = "Adicionar Dependente";
                return(RedirectToAction("Guests"));
            }
        }