public async Task <ActionResult <FlightPlan> > Get(string id)
        {
            FlightPlan p = null;

            if (planModel.GetAllPlans().FirstOrDefault(t => string.Compare(t.Key, id, true) == 0).Value != null)
            {
                p = planModel.GetAllPlans().FirstOrDefault(t => string.Compare(t.Key, id, true) == 0).Value;
            }
            else
            {
                try
                {
                    //search this id in external servers
                    Servers s;
                    serverModel.GetServerToFlightDic().TryGetValue(id, out s);
                    string url      = s.ServerURL + "/api/FlightPlan/" + id;
                    var    contentt = await this.client.GetStringAsync(url);

                    p = JsonConvert.DeserializeObject <FlightPlan>(contentt);
                }
                catch (WebException)
                {
                    return(BadRequest());
                }
                catch (Exception)
                {
                    return(StatusCode(500));
                }
            }
            if (p == null)
            {
                return(StatusCode(400));
            }
            return(p);
        }
        //[HttpGet("{id}", Name = "Get")]
        public async Task <ActionResult <Flight[]> > Get(string relative_to)
        {
            bool   isSync = false;
            string s      = Request.QueryString.Value;

            if (s.Contains("sync_all"))
            {
                isSync = true;
            }
            List <Flight> returnList = new List <Flight>();

            //if its the first GET request:
            // return array of that: 1.externalIs=false 2. Time is now
            if (!isSync)
            {
                DateTime parsedDate = DateTime.Parse(relative_to);
                parsedDate = TimeZoneInfo.ConvertTimeToUtc(parsedDate);
                foreach (var f in model.GetAllFlights())
                {
                    FlightPlan p;
                    planModel.GetAllPlans().TryGetValue(f.Value.FlightId, out p);
                    //find the start time as appear in the initial time in the flight plan

                    DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(p.InitialLocation.DateTime));
                    //update current location of flight
                    CurrentFlightLocation(startTime, parsedDate, f.Value);
                    DateTime endTime = CalcEndTime(startTime, f.Value);
                    //update end time of flight
                    f.Value.EndTime = endTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
                    int resultAfterStart = DateTime.Compare(parsedDate, startTime);
                    int resultBeforeEnd  = DateTime.Compare(parsedDate, endTime);
                    if ((resultAfterStart >= 0) && (resultBeforeEnd <= 0))
                    {
                        if (f.Value.IsExternal == false)
                        {
                            returnList.Add(f.Value);
                        }
                    }
                }
                Flight[] array = returnList.ToArray();
                return(array);
            }
            else
            {
                //Sync all: Its the second GET request: ALL flights from this time
                //FIRST PART - get all internal flights (flights source: drag & drop)
                DateTime parsedDate = DateTime.Parse(relative_to);
                parsedDate = TimeZoneInfo.ConvertTimeToUtc(parsedDate);
                foreach (var f in model.GetAllFlights())
                {
                    FlightPlan p;

                    planModel.GetAllPlans().TryGetValue(f.Value.FlightId, out p);
                    //find the start time as appear in the initial time in the flight plan
                    DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(p.InitialLocation.DateTime));
                    //update current location of flight
                    CurrentFlightLocation(startTime, parsedDate, f.Value);
                    DateTime endTime = CalcEndTime(startTime, f.Value);
                    //update end time of flight
                    f.Value.EndTime = endTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
                    int resultAfterStart = DateTime.Compare(parsedDate, startTime);
                    int resultBeforeEnd  = DateTime.Compare(parsedDate, endTime);
                    if ((resultAfterStart >= 0) && (resultBeforeEnd <= 0))
                    {
                        returnList.Add(f.Value);
                    }
                }
                //second part - get all exnternal flights (flights source: other servers)
                bool flagIsError = false;
                foreach (var server in serverModel.GetAllServers())
                {
                    try
                    {
                        string        url = server.Value.ServerURL + "/api/Flights?relative_to=" + relative_to;
                        List <Flight> flightsFromServer;
                        try
                        {
                            var contentt = await this.client.GetStringAsync(url);

                            flightsFromServer = JsonConvert.DeserializeObject <List <Flight> >(contentt);
                        }
                        catch
                        {
                            flagIsError = true;
                            continue;
                        }

                        foreach (var externalFlight in flightsFromServer)
                        {
                            serverModel.GetServerToFlightDic().AddOrUpdate(externalFlight.FlightId, server.Value, (oldKey, oldVal) => server.Value);
                            externalFlight.IsExternal = true;
                            string url2 = server.Value.ServerURL + "/api/FlightPlan/" + externalFlight.FlightId;
                            var    plan = await this.client.GetStringAsync(url2);

                            FlightPlan planFromServer = JsonConvert.DeserializeObject <FlightPlan>(plan);

                            DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(planFromServer.InitialLocation.DateTime));

                            DateTime endTime = CalcEndTimeForExternal(startTime, planFromServer);
                            externalFlight.EndTime = endTime.ToString("yyyy-MM-ddTHH:mm:ssZ");
                            int resultAfterStart = DateTime.Compare(parsedDate, startTime);
                            int resultBeforeEnd  = DateTime.Compare(parsedDate, endTime);
                            if ((resultAfterStart >= 0) && (resultBeforeEnd <= 0))
                            {
                                returnList.Add(externalFlight);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
                if (flagIsError)
                {
                    return(BadRequest());
                }
                Flight[] array = returnList.ToArray();
                return(array);
            }
        }