public ActionResult CadastrarVagaJson(VagaModel model)
        {
            try
            {
                VagaModel vaga = new VagaModel();

                vaga.DataCadastro = DateTime.Now;
                vaga.Empresa = model.Empresa;
                vaga.Descricao = model.Descricao;
                vaga.Cep = model.Cep;
                vaga.Habilidades = model.Habilidades;

                VagaDB db = new VagaDB();
                db.Vaga.Add(vaga);
                db.SaveChanges();

                object resultado = new object();
                resultado = new { mensagem = "Sucesso" };

                return Json(resultado, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {

                object resultado = new object();
                resultado = new { mensagem = "Ocorreu um erro ao tentar gravar a vaga" };

                return Json(resultado, JsonRequestBehavior.AllowGet);
            }
        }
        // metodos de listar
        public ViewResult Vagas()
        {
            VagaDB db = new VagaDB();
            List<VagaModel> listaDeVagas = db.Vaga.ToList();

            return View("Vagas", listaDeVagas);
        }
        //metodos json
        public JsonResult VagasJson()
        {
            VagaDB db = new VagaDB();
            List<VagaModel> listaDeVagas = db.Vaga.ToList();

            List<Object> resultado = new List<object>();

            foreach (var x in listaDeVagas)
            {
                resultado.Add(new
                {
                    DataCadastro = x.DataCadastro.ToShortDateString() + " " + x.DataCadastro.ToShortTimeString(),
                    Empresa = x.Empresa,
                    Descricao = x.Descricao,
                    Cep = x.Cep,
                    Habilidades = x.Habilidades,
                    Id = x.Id
                });
            }

            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        //metodos de pesquisa
        public ViewResult PesquisarVaga()
        {
            string idVaga = Request.QueryString.ToString();
            int id = Int32.Parse(idVaga);

            VagaDB vagadb = new VagaDB();
            List<VagaModel> vaga = vagadb.Vaga.Where(vg => vg.Id == id).ToList();

            VagaModel model = new VagaModel();
            if (vaga != null)
            {
                foreach (var item in vaga)
                {
                    model.Id = item.Id;
                    model.Empresa = item.Empresa;
                    model.Descricao = item.Descricao;
                    model.Cep = item.Cep;
                    model.Habilidades = item.Habilidades;
                }
            }
            return View("VagaEditar", model);
        }
        public JsonResult PesquisaDistancia(DistanciaModel model)
        {
            var idVaga = Request.QueryString.ToString();
            idVaga = idVaga.Substring(idVaga.IndexOf("id") + 2);
            idVaga = idVaga.Substring(0, idVaga.IndexOf("id"));
            int id = Int32.Parse(idVaga);

            VagaDB vagadb = new VagaDB();
            List<VagaModel> vaga = vagadb.Vaga.Where(vg => vg.Id == id).ToList();

            CandidatoDB candidatodb = new CandidatoDB();
            List<CandidatoModel> candidatos = candidatodb.Candidato.ToList();

            String[] HabilidadesCancdidato = new String[20];
            String[] HabilidadesVaga = new String[30];

            foreach (var item in vaga)
            {
                if (!string.IsNullOrEmpty(item.Habilidades))
                {
                    HabilidadesVaga = item.Habilidades.Split(',');
                }
            }

            foreach (var item in vaga)
            {
                model.CepVaga = item.Cep;
                if (!model.CepVaga.Contains('-'))
                {
                    model.CepVaga = model.CepVaga.Insert(5, "-");
                }
            }

            int distanciaAtual = 0, distanciaNova = 0;

            foreach (var item in candidatos)
            {
                if (!item.Cep.Contains('-'))
                {
                    item.Cep = item.Cep.Insert(5, "-");
                }

                var url = "https://maps.googleapis.com/maps/api/distancematrix/json";
                string queryString = "?origins=" + item.Cep + "&destinations=" + model.CepVaga + "&mode=driving";
                try
                {
                    String distancia = string.Empty;

                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + queryString);
                    WebResponse response = request.GetResponse();

                    using (Stream stream = response.GetResponseStream())
                    {
                        StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                        distancia = reader.ReadToEnd();
                    }

                    distancia = distancia.Substring(distancia.IndexOf("text") + 9);
                    distancia = distancia.Substring(0, distancia.IndexOf(","));

                    decimal porcentagem = 0, indice = 100 / HabilidadesVaga.Length;

                    if (distancia.Contains(" m"))
                    {
                        HabilidadesCancdidato = item.Habilidades.Split(',');
                        foreach (var habilidade in HabilidadesCancdidato)
                        {
                            if (HabilidadesVaga.Contains(habilidade))
                            {
                                porcentagem += indice;
                            }
                        }
                        model.Porcentagem = porcentagem.ToString();

                        string pattern = "\\D";
                        string replacement = "";
                        distancia = Regex.Replace(distancia, pattern, replacement);

                        model.NomeCandidato = item.Nome;
                        model.CepCandidato = item.Cep;
                        model.Distancia = distancia + " m";
                        break;
                    }

                    if (distancia.Contains(" km"))
                    {
                        HabilidadesCancdidato = item.Habilidades.Split(',');
                        foreach (var habilidade in HabilidadesCancdidato)
                        {
                            if (HabilidadesVaga.Contains(habilidade))
                            {
                                porcentagem += indice;
                            }
                        }
                        model.Porcentagem = porcentagem.ToString();

                        if (distancia.Contains("."))
                        {
                            distancia = distancia.Substring(0, distancia.IndexOf("."));
                        }
                        string pattern = "\\D";
                        string replacement = "";
                        distancia = Regex.Replace(distancia, pattern, replacement);

                        distanciaNova = Int32.Parse(distancia);
                        if (distanciaAtual == 0)
                        {
                            distanciaAtual = distanciaNova;
                            model.NomeCandidato = item.Nome;
                            model.CepCandidato = item.Cep;
                            model.Distancia = distanciaNova.ToString() + " km";
                        }
                        else
                        {
                            if (distanciaAtual > distanciaNova)
                            {
                                distanciaAtual = distanciaNova;
                                model.NomeCandidato = item.Nome;
                                model.CepCandidato = item.Cep;
                                model.Distancia = distanciaNova.ToString() + " km";
                            }

                        }
                    }
                }
                catch (Exception erro)
                {
                    TempData["mensagem"] = "Ocorreu um erro!";
                    throw erro;
                }
            }

            List<Object> resultado = new List<object>();

            resultado.Add(new
                            {
                                Nome = model.NomeCandidato,
                                Distancia = model.Distancia,
                                Cep = model.CepCandidato,
                                Porcentagem = model.Porcentagem
                            });
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public ViewResult Index()
        {
            VagaDB db = new VagaDB();
            List<VagaModel> listaDeVagas = db.Vaga.ToList();

            return View(listaDeVagas);
        }
        //metodos de excluir
        public ViewResult ExcluirVaga()
        {
            string idVaga = Request.QueryString.ToString();
            int id = Int32.Parse(idVaga);

            VagaDB vagadb = new VagaDB();
            var vaga = vagadb.Vaga.First(vg => vg.Id == id);
            if (vaga != null)
            {
                vagadb.Vaga.Remove(vaga);
                vagadb.SaveChanges();
            }

            List<VagaModel> listaDeVagas = vagadb.Vaga.ToList();

            return View("Vagas", listaDeVagas);
        }
        public ActionResult EditarVaga(VagaModel model)
        {
            try
            {
                using (var db = new VagaDB())
                {
                    var atualiza = db.Vaga.FirstOrDefault(vaga => vaga.Id == model.Id);
                    if (atualiza != null)
                    {
                        atualiza.Empresa = model.Empresa;
                        atualiza.Descricao = model.Descricao;
                        atualiza.Cep = model.Cep;
                        atualiza.Habilidades = model.Habilidades;

                        db.SaveChanges();
                    }
                }

                TempData["mensagem"] = "Realizado!";
                return View("VagaEditar");
            }
            catch (Exception erro)
            {
                TempData["mensagem"] = "Ocorreu um erro!";
                throw erro;
            }
        }