private async Task <cSearch> findLatLngLocality(cSearch search)
        {
            string uri, loclatlng;


            // uri = "https://maps.googleapis.com/maps/api/geocode/json?latlng=12.8069792,80.197437&key=AIzaSyDZ239b7m3O6c1uZCZez5EXfNYCQ5L4dYY";

            // uri = "https://maps.googleapis.com/maps/api/geocode/json?address=" + HttpUtility.UrlEncode("Kelambakkam Village, Gdt Road, Vandalur, Chennai 600048") + "&key=AIzaSyDZ239b7m3O6c1uZCZez5EXfNYCQ5L4dYY";


            if (search.where.Length > 5)
            {
                uri = "https://maps.googleapis.com/maps/api/geocode/json?address=" + HttpUtility.UrlEncode(search.where) + "&key=AIzaSyDZ239b7m3O6c1uZCZez5EXfNYCQ5L4dYY";
            }


            else //if ((search.lat != (decimal)-1.0) && (search.lat != (decimal)-1.0)) // if user provide lat,lng, then  need to find the locality.
            {
                uri = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + search.lat + "," + search.lng + "&key=AIzaSyDZ239b7m3O6c1uZCZez5EXfNYCQ5L4dYY";
            }


            HttpClient client    = new HttpClient();
            var        getResult = client.GetAsync(uri);

            getResult.Wait();
            var result = getResult.Result;

            if (result.IsSuccessStatusCode)
            {
                RootObject cnt = new RootObject();
                cnt = await result.Content.ReadAsAsync <RootObject>();

                if (cnt.results.Count > 0)
                {
                    search.latlngstatus = "OK";
                    search.lat          = (decimal)cnt.results[0].geometry.location.lat;
                    search.lng          = (decimal)cnt.results[0].geometry.location.lng;
                    search.where        = search.where + "," + extractAddressComponent(cnt.results[0].address_components);//get all sublocality for this area.
                }
                else
                {
                    search.lat = (decimal) - 1.0;
                    search.lng = (decimal) - 1.0;
                }
                loclatlng = cnt.results[0].geometry.location.lat.ToString() + "," + cnt.results[0].geometry.location.lng.ToString();
            }
            else
            {
                search.where = "";
                search.lat   = (decimal) - 1.0;
                search.lng   = (decimal) - 1.0;
            }
            return(search);
        }
        public async Task <List <cPartialSender> > ServicesbySearch_v2(cSearch search)
        {
            string uri;
            string loclatlong = "-1,-1";

            List <cPartialSender> ServiceProviders = new List <cPartialSender>();

            try
            {
                string constr = ConfigurationManager.ConnectionStrings["MyAbDbContext"].ConnectionString;

                using (SqlConnection con = new SqlConnection(constr))
                {
                    SqlCommand cmd = new SqlCommand("sp_ServiceProviderforSearchwithUnReg", con);
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlDataReader reader;

                    SqlParameter paramwhat = new SqlParameter();
                    paramwhat.ParameterName = "@what";
                    paramwhat.Value         = search.what;
                    cmd.Parameters.Add(paramwhat);


                    SqlParameter paramuserid = new SqlParameter();
                    paramuserid.ParameterName = "@userID";
                    paramuserid.Value         = search.userID;
                    cmd.Parameters.Add(paramuserid);

                    SqlParameter paramuserType = new SqlParameter();
                    paramuserType.ParameterName = "@userType";
                    paramuserType.Value         = search.userType;
                    cmd.Parameters.Add(paramuserType);

                    search = await findLatLngLocality(search);

                    SqlParameter paramwhere = new SqlParameter();
                    paramwhere.ParameterName = "@where";
                    paramwhere.Value         = search.where;
                    cmd.Parameters.Add(paramwhere);

                    if (search.where.Length < 2)
                    {
                        return(ServiceProviders);
                    }

                    SqlParameter paramlat = new SqlParameter();
                    paramlat.ParameterName = "@lat";
                    paramlat.Value         = search.lat;
                    cmd.Parameters.Add(paramlat);

                    SqlParameter paramlng = new SqlParameter();
                    paramlng.ParameterName = "@lng";
                    paramlng.Value         = search.lng;
                    cmd.Parameters.Add(paramlng);

                    con.Open();
                    reader = cmd.ExecuteReader();

                    while (reader.Read())
                    {
                        cPartialSender c = new cPartialSender();
                        c.SenderID          = (int)reader["SenderID"];
                        c.SenderName        = reader["SenderName"].ToString().Trim();
                        c.SenderContactNo_1 = reader["SenderContactNo_1"].ToString().Trim();


                        c.ContactHide  = (Int16)reader["ContactHide"];
                        c.cServiceType = reader["cServiceType"].ToString().Trim();
                        c.ServiceDesc  = reader["ServiceDesc"].ToString().Trim();
                        c.postcode     = reader["POSTCODE"].ToString().Trim();

                        if (reader["logopath"] != null)
                        {
                            if (reader["logopath"].ToString().Length > 0)
                            {
                                c.logopath = reader["logopath"].ToString().Trim();
                            }
                        }

                        c.subscribeonoff      = reader["subscribeonoff"].ToString().Trim();
                        c.ReviewReceived      = (int)reader["ReviewReceived"];
                        c.msgCommentsReceived = (int)reader["msgCommentsReceived"];
                        c.msgLikeReceived     = (int)reader["msgLikeReceived"];
                        c.msgTotpublished     = (int)reader["msgTotpublished"];
                        c.msgReadBy           = (int)reader["msgReadBy"];
                        c.address             = reader["address"].ToString().Trim();
                        c.isFCMActive         = reader["isFCMActive"].ToString().Trim();
                        ServiceProviders.Add(c);
                    }
                }
            }
            catch (Exception ex)
            {
                // distance.status = "failed";
                //return ex.Message;
            }
            return(ServiceProviders);
        }