public bool AddAirportsTripProviderItem(string fromAirportCode, string toAirportCode, int ProviderId)
        {
            bool result = false;

            try
            {
                AirportsTrip airportsTrip = _airportsTripRepo.FindAllBy(a => (a.Airport.Code.ToLower() == toAirportCode && a.Airport1.Code.ToLower() == fromAirportCode) || ((a.Airport.Code.ToLower() == fromAirportCode && a.Airport1.Code.ToLower() == toAirportCode))).FirstOrDefault();
                if (airportsTrip == null)
                {
                    airportsTrip = new AirportsTrip();
                    airportsTrip.FromAirportId = (_airportRepo.FindAllBy(a => a.Code.ToLower() == fromAirportCode)?.FirstOrDefault())?.Id ?? 0;
                    airportsTrip.ToAirportId   = (_airportRepo.FindAllBy(a => a.Code.ToLower() == toAirportCode)?.FirstOrDefault())?.Id ?? 0;
                    if (airportsTrip.ToAirportId > 0 && airportsTrip.FromAirportId > 0)
                    {
                        airportsTrip.Attractiveness = 100;
                        _airportsTripRepo.Add(airportsTrip);
                        _airportsTripRepo.Save();
                    }
                }
                if (airportsTrip != null && airportsTrip.Id > 0 && !airportsTrip.Providers.Where(p => p.Id == ProviderId).Any())
                {
                    airportsTrip.Providers.Add(_providerRepo.Get(ProviderId));
                }
            }
            catch (Exception e)
            {
                FlightsEngine.Utils.Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "fromAirportCode = " + fromAirportCode + " and ToAirpoderCode = " + toAirportCode + " and ProviderId = " + ProviderId);
            }
            finally
            {
                result = _airportsTripRepo.Save();
            }
            return(result);
        }
        public AirportsTrip GetAirportsTripForProviderRoute(int ProviderId)
        {
            AirportsTrip result = null;

            try
            {
                var airportsTrips = _airportsTripRepo.FindAllBy(a => a.Providers.Where(p => p.Id == ProviderId).Any()).ToList();
                if (airportsTrips != null && airportsTrips.Count > 0)
                {
                    return(airportsTrips.OrderBy(a => a.Id).OrderBy(t => t.Airport1.Code).OrderBy(t => t.Airport.Code).FirstOrDefault());
                }
            }
            catch (Exception e)
            {
                FlightsEngine.Utils.Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "ProviderId = " + ProviderId);
            }
            return(result);
        }
        static bool GetAirportsRoutes(string Key)
        {
            bool resultRoutes           = true;;
            List <AirportItem> Airports = new List <AirportItem>();

            try
            {
                var            context         = new TemplateEntities1();
                AirportService _airportService = new AirportService(context);
                //   _airportService.DeleteAirportsTripProvider(Providers.BritishAirways);
                List <AirportItem> AirportsList = getBADestinations(Key);
                AirportsList = AirportsList.OrderBy(a => a.Code).ToList();
                AirportsTrip lastAirportsTrip = _airportService.GetAirportsTripForProviderRoute(Providers.BritishAirways);

                bool result               = false;
                int  AttemptsNumber       = 0;
                int  MaxRequestAttempts   = FlightsEngine.Models.Constants.Constants.MaxRequestAttempts;
                bool NeedToContinueSearch = true;



                foreach (var fromAirport in AirportsList)
                {
                    foreach (var toAirport in AirportsList)
                    {
                        if (lastAirportsTrip != null)
                        {
                            int test  = string.Compare(lastAirportsTrip.Airport.Code, fromAirport.Code);
                            int tets2 = string.Compare(lastAirportsTrip.Airport1.Code, toAirport.Code);
                        }
                        if (!String.IsNullOrWhiteSpace(fromAirport.Code) && !String.IsNullOrWhiteSpace(toAirport.Code) && (lastAirportsTrip == null || (string.Compare(lastAirportsTrip.Airport.Code, fromAirport.Code) <= 0 && string.Compare(lastAirportsTrip.Airport1.Code, toAirport.Code) <= 0)))
                        {
                            result               = false;
                            AttemptsNumber       = 0;
                            NeedToContinueSearch = true;
                            while (!result && AttemptsNumber <= MaxRequestAttempts && NeedToContinueSearch)
                            {
                                AttemptsNumber++;
                                var client      = new HttpClient();
                                var queryString = HttpUtility.ParseQueryString(string.Empty);


                                var url            = "https://api.ba.com/rest-v1/v1/flightOfferBasic;departureCity=" + fromAirport.CityCode + ";arrivalCity=" + toAirport.CityCode + ";cabin=economy;journeyType=roundTrip;range=yearLow";
                                var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                                // httpWebRequest.ContentType = "application/json";
                                httpWebRequest.Method = "GET";
                                httpWebRequest.Headers.Add("client-key", Key);

                                HttpWebResponse httpResponse = null;
                                try
                                {
                                    AttemptsNumber++;
                                    httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                                    result       = true;
                                }
                                catch (WebException e)
                                {
                                    result = false;
                                    if (!e.ToString().Contains("404"))
                                    {
                                        string webError = FlightsEngine.Utils.Logger.GenerateWebError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "FromAirportId = " + fromAirport.Id + " and toAirportId = " + toAirport.Id);
                                    }
                                    else
                                    {
                                        NeedToContinueSearch = false;
                                    }
                                }


                                if (result)
                                {
                                    NeedToContinueSearch = false;
                                    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                                    {
                                        var requestResult = streamReader.ReadToEnd();

                                        if (!String.IsNullOrWhiteSpace(requestResult))
                                        {
                                            _airportService.AddAirportsTripProviderItem(fromAirport.Code, toAirport.Code, Providers.BritishAirways);
                                        }
                                    }
                                }
                                System.Threading.Thread.Sleep(1000);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                resultRoutes = false;
                FlightsEngine.Utils.Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            }
            return(resultRoutes);
        }