public void listarClinicas(string Localidade)
        {
            Localidade = HttpUtility.UrlPathEncode(Localidade);
            string              retorno  = "";
            retornoMineracao    clinicas = new retornoMineracao();
            HttpResponseMessage response = client.GetAsync("/maps/api/place/textsearch/json?input=clinica%20popular%20rio%20de%20janeiro&inputtype=textquery&fields=photos,formatted_address,name,rating,opening_hours,geometry,place_id,price_level,permanently_closed&key=AIzaSyBbjKpIM4wD3dj3W5VqGuCYMH6hdoGhXP8").Result;

            if (response.IsSuccessStatusCode)
            {
                retorno  = response.Content.ReadAsStringAsync().Result;
                clinicas = JsonConvert.DeserializeObject <retornoMineracao>(retorno);
                foreach (var clinica in clinicas.results)
                {
                    AmostraClinica c = new AmostraClinica();
                    string         tel1 = "", tel2 = "";
                    var            cliAux = db.AmostrasClinicas.FirstOrDefault(u => u.NomeFantasia == clinica.name);
                    if (cliAux == null)
                    {
                        c.NomeFantasia      = clinica.name;
                        c.PlaceID           = clinica.place_id;
                        c.Lt                = clinica.geometry.location.lat.ToString();
                        c.Lg                = clinica.geometry.location.lng.ToString();
                        c.avaliacao         = clinica.rating;
                        c.EnderecoFormatado = clinica.formatted_address.Replace("Brazil", "Brasil");;
                        c.IdEstado          = 19;
                        c.IdUsuario         = 1;
                        c.Ativo             = true;
                        HttpResponseMessage response1 = client.GetAsync("/maps/api/place/details/json?placeid=" + clinica.place_id + "&fields=formatted_phone_number,address_components,website,photo&key=AIzaSyBbjKpIM4wD3dj3W5VqGuCYMH6hdoGhXP8").Result;
                        string retorno1 = "";
                        if (response1.IsSuccessStatusCode)
                        {
                            retorno1 = response1.Content.ReadAsStringAsync().Result;
                            var    aclinica = JsonConvert.DeserializeObject <retornoPlaceID>(retorno1);
                            var    cid      = aclinica.result.address_components.Where(a => a.types.Any(s => s.Contains("administrative_area_level_2"))).FirstOrDefault();
                            string cida     = cid != null ? cid.short_name : null;
                            if (cida != null)
                            {
                                var cidade = db.Cidades.Where(d => d.Nome.ToUpper() == cida.ToUpper()).FirstOrDefault();
                                if (cidade != null)
                                {
                                    c.IdCidade = cidade.Id;
                                }
                            }
                            var    bair   = aclinica.result.address_components.Where(a => a.types.Any(s => s.Contains("locality"))).FirstOrDefault();
                            string bairri = bair != null ? bair.short_name : null;
                            if (bairri != null)
                            {
                                var bairro = db.Bairros.Where(d => d.Nome.ToUpper().Contains(bairri.ToUpper()) && d.Nome.Contains("Rio de Janeiro")).FirstOrDefault();
                                if (bairro != null)
                                {
                                    c.IdBairro = bairro.Id;
                                }
                            }
                            c.LinkSite = aclinica.result.website;
                            tel1       = aclinica.result.formatted_phone_number;
                            tel2       = aclinica.result.international_phone_number;
                        }

                        db.AmostrasClinicas.Add(c);
                        try
                        {
                            if (c.IdBairro != null && c.IdCidade != null && c.IdBairro > 0 && c.IdCidade > 0)
                            {
                                db.SaveChanges();
                                if (!string.IsNullOrEmpty(tel1))
                                {
                                    db.TelefonesClinicas.Add(new TelefonesClinica {
                                        Numero = tel1, IdAmostraClinica = c.Id
                                    });
                                }
                                if (!string.IsNullOrEmpty(tel2))
                                {
                                    db.TelefonesClinicas.Add(new TelefonesClinica {
                                        Numero = tel2, IdAmostraClinica = c.Id
                                    });
                                }
                                db.SaveChanges();
                            }
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                    }

                    c = null;
                }
                string proxPag = clinicas.next_page_token;
                for (int i = 0; i < 40; i++)
                {
                    HttpResponseMessage prox = new HttpResponseMessage();
                    prox     = client.GetAsync("/maps/api/place/nearbysearch/json?pagetoken=" + proxPag + "&key=AIzaSyBbjKpIM4wD3dj3W5VqGuCYMH6hdoGhXP8").Result;
                    clinicas = JsonConvert.DeserializeObject <retornoMineracao>(retorno);
                    foreach (var clinica in clinicas.results)
                    {
                        string         telcli1 = "", telcli2 = "";
                        AmostraClinica c      = new AmostraClinica();
                        var            cliAux = db.AmostrasClinicas.FirstOrDefault(u => u.NomeFantasia == clinica.name);
                        if (cliAux == null)
                        {
                            c.NomeFantasia      = clinica.name;
                            c.PlaceID           = clinica.place_id;
                            c.Lt                = clinica.geometry.location.lat.ToString();
                            c.Lg                = clinica.geometry.location.lng.ToString();
                            c.avaliacao         = clinica.rating;
                            c.EnderecoFormatado = clinica.formatted_address.Replace("Brazil", "Brasil");
                            c.IdEstado          = 19;
                            c.IdUsuario         = 1;
                            c.Ativo             = true;
                            HttpResponseMessage response1 = client.GetAsync("/maps/api/place/details/json?placeid=" + clinica.place_id + "&fields=formatted_phone_number,address_components,website,photo&key=AIzaSyBbjKpIM4wD3dj3W5VqGuCYMH6hdoGhXP8").Result;
                            string retorno1 = "";
                            if (response1.IsSuccessStatusCode)
                            {
                                retorno1 = response1.Content.ReadAsStringAsync().Result;
                                var    aclinica = JsonConvert.DeserializeObject <retornoPlaceID>(retorno1);
                                var    cid      = aclinica.result.address_components.Where(a => a.types.Any(s => s.Contains("administrative_area_level_2"))).FirstOrDefault();
                                string cida     = cid != null ? cid.short_name : null;
                                if (cida != null)
                                {
                                    var cidade = db.Cidades.Where(d => d.Nome.ToUpper() == cida.ToUpper()).FirstOrDefault();
                                    if (cidade != null)
                                    {
                                        c.IdCidade = cidade.Id;
                                    }
                                }
                                var    bair   = aclinica.result.address_components.Where(a => a.types.Any(s => s.Contains("locality"))).FirstOrDefault();
                                string bairri = bair != null ? bair.short_name : null;
                                if (bairri != null)
                                {
                                    var bairro = db.Bairros.Where(d => d.Nome.ToUpper().Contains(bairri.ToUpper()) && d.Nome.Contains("Rio de Janeiro")).FirstOrDefault();
                                    if (bairro != null)
                                    {
                                        c.IdBairro = bairro.Id;
                                    }
                                }
                                c.LinkSite = aclinica.result.website;
                                telcli1    = aclinica.result.formatted_phone_number;
                                telcli2    = aclinica.result.international_phone_number;
                            }

                            db.AmostrasClinicas.Add(c);
                            try
                            {
                                if (c.IdBairro != null && c.IdCidade != null && c.IdBairro > 0 && c.IdCidade > 0)
                                {
                                    db.SaveChanges();
                                    if (!string.IsNullOrEmpty(telcli1))
                                    {
                                        db.TelefonesClinicas.Add(new TelefonesClinica {
                                            Numero = telcli1, IdAmostraClinica = c.Id
                                        });
                                    }
                                    if (!string.IsNullOrEmpty(telcli2))
                                    {
                                        db.TelefonesClinicas.Add(new TelefonesClinica {
                                            Numero = telcli2, IdAmostraClinica = c.Id
                                        });
                                    }
                                    db.SaveChanges();
                                }
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }
                    }
                    proxPag = clinicas.next_page_token;
                }
            }
        }
        public ActionResult CadastrarClinica(AmostraClinicaViewModel dto, int[] servicos, int[] especialidades, string[] cel)
        {
            if (!ModelState.IsValid)
            {
                selectsCadastro();
                return(View());
            }

            var est      = db.Estados.Find(dto.IdEstado);
            var cid      = db.Cidades.Find(dto.IdCidade);
            var bair     = db.Bairros.Find(dto.IdBairro);
            var identity = User.Identity as ClaimsIdentity;

            int            id = Convert.ToInt32(identity.Claims.FirstOrDefault(c => c.Type == "Id").Value);
            AmostraClinica a  = new AmostraClinica
            {
                EnderecoFormatado = dto.logradouro + ", " + dto.numero + " - " + dto.complemento + " - " + bair.Nome + ", " + cid.Nome + " - " + est.CodigoUf + ", " + dto.cepClinica + ", Brasil",
                NomeFantasia      = dto.Nome,
                LinkSite          = dto.Site,
                Lt             = dto.Latitude,
                Lg             = dto.Longitude,
                PrecoConsulta  = dto.PrecoConsulta,
                PrecoExame     = dto.PrecoExame,
                HoraAbertura   = dto.HoraAbertura,
                HoraFechamento = dto.HoraFechamento,
                Pontos         = dto.pontos,
                IdUsuario      = id,
                IdEstado       = dto.IdEstado,
                IdBairro       = dto.IdBairro,
                IdCidade       = dto.IdCidade
            };

            List <Servico> servs = new List <Servico>();

            foreach (int s in servicos)
            {
                servs.Add(db.Servicos.Find(s));
            }

            List <Especialidade> esps = new List <Especialidade>();

            foreach (int s in especialidades)
            {
                esps.Add(db.Especialidades.Find(s));
            }


            a.Servicos       = servs;
            a.Especialidades = esps;

            try
            {
                db.AmostrasClinicas.Add(a);
                db.SaveChanges();
                List <TelefonesClinica> tels = new List <TelefonesClinica>();
                foreach (string s in cel)
                {
                    tels.Add(new TelefonesClinica {
                        Numero = s
                    });
                }
                a.TelefonesClinicas = tels;
                db.SaveChanges();
            }
            catch (Exception)
            {
                throw;
            }

            return(View("Index"));
        }