// Example URL: https://fieldscribeapi2017.azurewebsites.net/athletes/20/events
        public IList <Event> GetEventsByAthleteId(int athleteId)
        {
            try
            {
                JObject jsonEventObj = JObject.Parse(
                    FieldScribeAPIRequests.GETAsync(
                        FieldScribeAPIRequests.FieldScribeAPIRootAddress + "athletes/" + athleteId + "/events?limit=100"));

                IList <JToken> eventTokens = jsonEventObj["value"].Children().ToList();

                IList <Event> events = new List <Event>();

                foreach (JToken item in eventTokens)
                {
                    events.Add(item.ToObject <Event>());
                    events.Last().MeasurementType = item["params"]["measurementType"].ToString();
                    events.Last().EventType       = item["params"]["eventType"].ToString();
                    events.Last().Precision       = Convert.ToDecimal(item["params"]["precision"].ToString());
                    events.Last().Maximum         = Convert.ToDecimal(item["params"]["maximum"].ToString());
                }

                return(events);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to get events by athlete id!", "Unexpected Error!", MessageBoxButton.OK, MessageBoxImage.Error);
                throw ex;
            }
        }
        // Example URL: https://fieldscribeapi2017.azurewebsites.net/events/88
        public Event GetEventByEventId(int eventId)
        {
            try
            {
                JObject jsonEventObj = JObject.Parse(
                    FieldScribeAPIRequests.GETAsync(
                        FieldScribeAPIRequests.FieldScribeAPIRootAddress + "events/" + eventId + "?limit=1"));

                var _event = new Event
                {
                    EventId         = Convert.ToInt32(jsonEventObj["eventId"].ToString()),
                    MeetId          = Convert.ToInt32(jsonEventObj["meetId"].ToString()),
                    EventNum        = Convert.ToInt32(jsonEventObj["eventNum"].ToString()),
                    RoundNum        = Convert.ToInt32(jsonEventObj["roundNum"].ToString()),
                    FlightNum       = Convert.ToInt32(jsonEventObj["flightNum"].ToString()),
                    EventName       = jsonEventObj["eventName"].ToString(),
                    MeasurementType = jsonEventObj["params"]["measurementType"].ToString(),
                    EventType       = jsonEventObj["params"]["eventType"].ToString(),
                    Precision       = Convert.ToDecimal(jsonEventObj["params"]["precision"].ToString()),
                    Maximum         = Convert.ToDecimal(jsonEventObj["params"]["maximum"].ToString()),
                };

                // TODO: I am not sure what to do with bar heights. The api tends to return null values here.
                var barHeightTokens = jsonEventObj["barHeights"].Children().ToArray();

                foreach (JToken token in barHeightTokens)
                {
                    _event.BarHeights.Add(token.ToObject <BarHeight>());
                }

                return(_event);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to get event by event id!", "Unexpected Error!", MessageBoxButton.OK, MessageBoxImage.Error);
                throw ex;
            }
        }
        public bool AddMeetFiles(
            int meetId, ILynxFileService fileService, string token)
        {
            var lynxFiles = new LynxFiles
            {
                MeetId      = meetId,
                PPLFileText = fileService.GetPPL(),
                SCHFileText = fileService.GetSCH(),
                EVTFileText = fileService.GetEVT()
            };

            string jsonLynxFiles = JsonConvert.SerializeObject(lynxFiles);

            var response = FieldScribeAPIRequests.POSTJsonWithTokenAsync(
                jsonLynxFiles, "lynx", token)
                           .StatusCode;

            if (response == System.Net.HttpStatusCode.Created)
            {
                return(true);
            }

            return(false);
        }