public async Task <ActionResult> Training(int dogId, int trainingId)
        {
            if (!LoginHelper.IsAuthenticated())
            {
                return(RedirectToAction("Login", "Account", new { returnUrl = this.Request.Url.AbsoluteUri }));
            }
            else if (!LoginHelper.IsCurrentUserAdmin() && !LoginHelper.IsCurrentUserMember())
            {
                return(RedirectToAction("Error", "Home", new { error = "Nie masz wystarczających uprawnień by przeglądać tę sekcję" }));
            }
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", LoginHelper.GetToken());
            var blobTrackLinkBase = @"https://kgtstorage.blob.core.windows.net/tracks/";
            HttpResponseMessage responseMessage =
                await client.GetAsync($"dogtrainings/training?trainingId={trainingId}&dogId={dogId}");

            if (responseMessage.IsSuccessStatusCode)
            {
                var responseData         = responseMessage.Content.ReadAsStringAsync().Result;
                var dogTraining          = JsonConvert.DeserializeObject <DogTrainingModel>(responseData);
                var dogTrainingViewModel = new DogTrainingViewModel()
                {
                    Comments         = dogTraining.Comments,
                    Dog              = dogTraining.Dog,
                    DogId            = dogTraining.DogId,
                    DogTrackFilename = dogTraining.DogTrackBlobUrl
                                       .Remove(dogTraining.DogTrackBlobUrl.IndexOf(blobTrackLinkBase), blobTrackLinkBase.Length),
                    LostPerson = dogTraining.LostPerson,
                    LostPersonTrackFilename = dogTraining.LostPersonTrackBlobUrl
                                              .Remove(dogTraining.LostPersonTrackBlobUrl.IndexOf(blobTrackLinkBase), blobTrackLinkBase.Length),
                    Notes      = dogTraining.Notes,
                    Training   = dogTraining.Training,
                    TrainingId = dogTraining.TrainingId,
                    Weather    = dogTraining.Weather,
                    GroundType = dogTraining.GroundType,
                    AdditionalPictureBlobUrl = dogTraining.AdditionalPictureBlobUrl
                };
                if (!String.IsNullOrEmpty(dogTraining.DogTrackBlobUrl))
                {
                    var webRequestDogTrack = WebRequest.Create(dogTraining.DogTrackBlobUrl);
                    try
                    {
                        using (var response = webRequestDogTrack.GetResponse())
                            using (var content = response.GetResponseStream())
                                using (var reader = new StreamReader(content))
                                {
                                    XDocument gpxDoc     = XDocument.Load(reader);
                                    var       serializer = new XmlSerializer(typeof(Trkseg));
                                    var       trkseg     = (Trkseg)serializer.Deserialize(gpxDoc.Root.CreateReader());
                                    if (trkseg != null && trkseg.Trkpt.Any())
                                    {
                                        var t = trkseg.Trkpt;
                                        dogTrainingViewModel.DogTrackPoints = t;
                                        //dogTrainingViewModel.DogTrackLength = DogTrainingHelper.CalculateGPSTrackLength(trkseg);
                                        dogTrainingViewModel.Duration       = DogTrainingHelper.CalculateDuration(trkseg);
                                        dogTrainingViewModel.TimeOfDogStart = DogTrainingHelper.CalculateGPSTrackStartTime(trkseg);
                                    }
                                }
                    }
                    catch (Exception e)
                    {
                        ViewBag.Message = e.Message;
                        return(View("Error"));
                    }
                }
                if (!String.IsNullOrEmpty(dogTraining.LostPersonTrackBlobUrl))
                {
                    var webRequestLostPersonTrack = WebRequest.Create(dogTraining.LostPersonTrackBlobUrl);
                    try
                    {
                        using (var response = webRequestLostPersonTrack.GetResponse())
                            using (var content = response.GetResponseStream())
                                using (var reader = new StreamReader(content))
                                {
                                    XDocument gpxDoc     = XDocument.Load(reader);
                                    var       serializer = new XmlSerializer(typeof(Trkseg));
                                    var       trkseg     = (Trkseg)serializer.Deserialize(gpxDoc.Root.CreateReader());

                                    if (trkseg != null && trkseg.Trkpt.Any())
                                    {
                                        var t = trkseg.Trkpt;
                                        dogTrainingViewModel.LostPersonTrackPoints = t;
                                        //dogTrainingViewModel.LostPersonTrackLength = DogTrainingHelper.CalculateGPSTrackLength(trkseg);
                                        dogTrainingViewModel.TimeOfLostPersonStart = DogTrainingHelper.CalculateGPSTrackStartTime(trkseg);
                                        dogTrainingViewModel.DelayTime             = dogTrainingViewModel.TimeOfDogStart - dogTrainingViewModel.TimeOfLostPersonStart;
                                    }
                                }
                    }
                    catch (Exception e)
                    {
                        ViewBag.Message = e.Message;
                        return(View("Error"));
                    }
                }
                return(View(dogTrainingViewModel));
            }
            else
            {
                ViewBag.Message = "code: " + responseMessage.StatusCode;
                return(View("Error"));
            }
        }
        public ActionResult Update(DogTrainingViewModel model, HttpPostedFileBase imageFile)
        {
            if (!LoginHelper.IsAuthenticated())
            {
                return(RedirectToAction("Login", "Account"));
            }
            else if (!LoginHelper.IsCurrentUserAdmin() && !LoginHelper.IsCurrentUserMember())
            {
                return(RedirectToAction("Error", "Home", new { error = "Nie masz wystarczających uprawnień by zmieniać te dane" }));
            }


            if (imageFile != null)
            {
                MultipartFormDataContent form = new MultipartFormDataContent();
                var imageStreamContent        = new StreamContent(imageFile.InputStream);
                var byteArrayImageContent     = new ByteArrayContent(imageStreamContent.ReadAsByteArrayAsync().Result);
                byteArrayImageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
                var imageFileName = imageFile.FileName + Guid.NewGuid().ToString();
                form.Add(byteArrayImageContent, imageFileName, Path.GetFileName(imageFileName));
                client.DefaultRequestHeaders.Authorization =
                    new AuthenticationHeaderValue("Bearer", LoginHelper.GetToken());
                var response = client.PostAsync("DogTrainings/UploadImage", form).Result;

                if (response.IsSuccessStatusCode)
                {
                    model.AdditionalPictureBlobUrl = @"https://kgtstorage.blob.core.windows.net/images/" + imageFileName;
                }
                else
                {
                    ViewBag.Message = response.StatusCode;
                    return(View("Error"));
                }
            }

            var lostPersonTrackPoints = new Trkseg {
                Trkpt = model.LostPersonTrackPoints
            };
            var dogTrackPoints = new Trkseg {
                Trkpt = model.DogTrackPoints
            };

            UpdateTracks(model.DogId, model.TrainingId, model.LostPersonTrackFilename, model.DogTrackFilename, lostPersonTrackPoints, dogTrackPoints);

            var dogTrainingModel = new DogTrainingModel
            {
                LostPerson               = model.LostPerson,
                Notes                    = model.Notes,
                Weather                  = model.Weather,
                GroundType               = model.GroundType,
                Comments                 = model.Comments,
                DogId                    = model.DogId,
                TrainingId               = model.TrainingId,
                LostPersonTrackLength    = model.LostPersonTrackLength,
                DelayTime                = model.DelayTime,
                AdditionalPictureBlobUrl = model.AdditionalPictureBlobUrl
            };

            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", LoginHelper.GetToken());
            System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

            HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Put, client.BaseAddress + $"dogtrainings/training?dogId={model.DogId}&trainingId={model.TrainingId}");

            var dogTrainingSerialized = JsonConvert.SerializeObject(dogTrainingModel);


            message.Content = new StringContent(dogTrainingSerialized, System.Text.Encoding.UTF8, "application/json");
            HttpResponseMessage responseMessage = client.SendAsync(message).Result;

            if (responseMessage.IsSuccessStatusCode)    //200 OK
            {
                message.Dispose();
                var responseData = responseMessage.Content.ReadAsStringAsync().Result;
                var definition   = new { DogId = "", TrainingId = "" };
                var ids          = JsonConvert.DeserializeAnonymousType(responseData, definition);
                return(RedirectToAction("Training", new { dogId = ids.DogId, trainingId = ids.TrainingId }));
            }
            else    // msg why not ok
            {
                ViewBag.Message = "code: " + responseMessage.StatusCode;
                return(View("Error"));
            }
        }