//public async Task<List<TrainService>> GetDepartures(ushort numberOfresults, string startingStation, string destinationStation = null)
        //{
        //    return GetArrivals(numberOfresults, startingStation, destinationStation);

        //    var arrivals = await MakeArrivalsRequestWithHeaders(numberOfresults, "WAT", "HAV");
        //    var past = await MakePastRequestWithHeaders(numberOfresults, startingStation, destinationStation);
        //    var future = await MakeFutureRequestWithHeaders(numberOfresults, startingStation, destinationStation);
        //    if (past.GetStationBoardResult.trainServices != null)
        //    {
        //        var res =  past.GetStationBoardResult.trainServices.Select(s => new TrainService() {
        //            Destination = s.destination[0].locationName,
        //            ScheduledDeparture = s.std,
        //            ExpectedDepature = s.etd,
        //            ServiceID = s.serviceID})
        //            .ToList();

        //        res.AddRange(future.GetStationBoardResult.trainServices.Select(s => new TrainService()
        //        {
        //            Destination = s.destination[0].locationName,
        //            ScheduledDeparture = s.std,
        //            ExpectedDepature = s.etd,
        //            ServiceID = s.serviceID
        //        })
        //            .ToList());


        //        //DataContractJsonSerializer f = new DataContractJsonSerializer(res.GetType());
        //        //using(System.IO.MemoryStream stream = new System.IO.MemoryStream())
        //        //{
        //        //    f.WriteObject(stream, res);
        //        //    stream.Position = 0;
        //        //    var content = new System.IO.StreamReader(stream).ReadToEnd();
        //        //}
        //        foreach (var serivce in res)
        //        {
        //            var details = await MakeServiceDetailsRequestWithHeaders(serivce.ServiceID);
        //            var callingPoints = details.GetServiceDetailsResult.subsequentCallingPoints.FirstOrDefault().callingPoint;
        //            var destination = callingPoints.Where(s => s.crs == destinationStation);
        //            serivce.ScheduledTermination = destination.FirstOrDefault().st;
        //            serivce.ActualTermination = destination.FirstOrDefault().at;
        //            serivce.EstimatedTermination = destination.FirstOrDefault().et;
        //        }



        //        return res;
        //    }
        //    else
        //    {
        //        return new List<TrainService>();
        //    }
        //}
        public Task <GetArrBoardWithDetailsResponse> MakeArrivalsRequestWithHeaders(ushort numberOfresults, string startingStation, string destinationStation = null)
        {
            var responce = new List <TrainService>();

            using (new OperationContextScope(_service.InnerChannel))
            {
                var msgHeader = MessageHeader.CreateHeader("AccessToken", "", _accessToken);
                OperationContext.Current.OutgoingMessageHeaders.Add(msgHeader);
                //return _service.GetDepartureBoardAsync(numberOfresults, startingStation, destinationStation, FilterType.to, -120, 120);

                return(_service.GetArrBoardWithDetailsAsync(numberOfresults, startingStation, destinationStation, FilterType.from, 0, 120));
            }
        }
 public async Task <GetArrBoardWithDetailsResponse> GetArrBoardWithDetailsAsync(AccessToken accessToken, ushort numRows, string crs, string filterCrs,
                                                                                FilterType filterType, int timeOffset, int timeWindow)
 {
     return(await Execute(() => client.GetArrBoardWithDetailsAsync(accessToken, numRows, crs, filterCrs, filterType, timeOffset, timeWindow)));
 }