public long CreateEvent(User accessToken, GamingEvent eventInfo, List<User> inviteList)
        {
            GameNickEntities entities = new GameNickEntities();
            if (IsAuthenticated(accessToken, entities))
            {
                FacebookClient facebookClient = new FacebookClient(accessToken.FacebookAccessToken);
                Dictionary<string, object> createEventParameters = new Dictionary<string, object>();
                createEventParameters.Add("name", eventInfo.Name);
                createEventParameters.Add("start_time", eventInfo.StartTime.ToString());
                createEventParameters.Add("end_time", eventInfo.EndTime.ToString());
                createEventParameters.Add("owner", accessToken.FacebookID.ToString());
                createEventParameters.Add("privacy", "OPEN");
                createEventParameters.Add("description", eventInfo.Description);
                try
                {
                    dynamic result = facebookClient.Post("me/events", createEventParameters);

                    if (result != null)
                    {
                        long eventId = (long) Convert.ToInt64(result["id"].ToString());
                        if (inviteList != null)
                            if(inviteList.Count > 0)
                        {
                            string inviteString = "/invited?users=";
                            for (int i = 0; i < inviteList.Count(); i++)
                            {
                                inviteString += inviteList[i].FacebookID.ToString();
                                if (i < inviteList.Count() - 1)
                                    // don't add a , at the end
                                    inviteString += ",";
                            }

                            dynamic inviteResult =
                                 facebookClient.Post(eventId.ToString() + inviteString);
                        }
                        // add event to database
                        Event eEvent = Event.CreateEvent(0, eventInfo.Event.GameID, eventId);
                        entities.AddToEvents(eEvent);
                        entities.SaveChanges();
                        return eventId;
                    }
                }
                catch (Exception e)
                {

                    throw;
                }

                throw new Exception();
            }
            throw new SecurityAccessDeniedException();
        }
        public List<GamingEvent> GetEvents(User accessToken, User user)
        {
            GameNickEntities entities = new GameNickEntities();
            if (IsAuthenticated(accessToken, entities))
            {
                // Get users Facebook events
                FacebookClient facebookClient = new FacebookClient(accessToken.FacebookAccessToken);
                // Check to see which of these events are also GameNick events
                dynamic result = facebookClient.Get(user.FacebookID + "/events");
                List<GamingEvent> gamingEvents = new List<GamingEvent>();
                if (result.data == null)
                    return new List<GamingEvent>() {new GamingEvent() {Name = "No Events"}};
                foreach (dynamic o in result.data)
                {
                    DateTime startTime = Convert.ToDateTime(o.start_time);
                    // If the event date is today or later than today
                    if (startTime >= DateTime.Today)
                    {
                        // If the event is in our database
                        long facebookId = Convert.ToInt64((o.id.ToString()));
                        var e = entities.Events.Where(evnt => evnt.FacebookID == facebookId);
                        if (e.Count() > 0)
                        {
                            // Build the event info to send back to the user
                            Event eEvent = e.First();
                            dynamic facebookEvent = facebookClient.Get(eEvent.FacebookID.ToString());
                            GamingEvent gamingEvent = new GamingEvent()
                                                          {
                                                              Description = facebookEvent.description,
                                                              EndTime = facebookEvent.end_time,
                                                              StartTime = facebookEvent.start_time,
                                                              Event = eEvent,
                                                              Name = facebookEvent.name,

                                                          };
                            gamingEvents.Add(gamingEvent);
                        }
                    }
                }
                return gamingEvents;
            }
            throw new SecurityAccessDeniedException();
        }
        public List<GamingEvent> GetEvents(User accessToken, Game game)
        {
            GameNickEntities entities = new GameNickEntities();
            if (IsAuthenticated(accessToken, entities))
            {
                List<GamingEvent> events = new List<GamingEvent>();
                var result = entities.Events.Where(eEvent => eEvent.GameID == game.ID).ToList();
                foreach (Event eEvent in result)
                {
                    try
                    {
                        FacebookClient facebookClient = new FacebookClient(accessToken.FacebookAccessToken);
                        dynamic fbEvent = facebookClient.Get(eEvent.FacebookID.ToString());
                        GamingEvent nEvent = new GamingEvent();
                        nEvent.Event = eEvent;
                        if(fbEvent.description != null)
                            nEvent.Description = fbEvent.description.ToString();
                        if(fbEvent.start_time != null)
                            nEvent.StartTime = Convert.ToDateTime(fbEvent.start_time.ToString());
                        if(fbEvent.end_time != null)
                            nEvent.EndTime = Convert.ToDateTime(fbEvent.end_time.ToString());
                        if(fbEvent.location != null)
                            nEvent.Location = fbEvent.location.ToString();
                        if(fbEvent.name != null)
                            nEvent.Name = fbEvent.name.ToString();
                        events.Add(nEvent);
                    }
                    catch (Exception e)
                    {
                        // todo: log error here

                    }
                }
                if (events.Count == 0)
                {
                    events.Add(new GamingEvent() {Name = "No events here"});
                }
                return events;
            }
            throw new SecurityAccessDeniedException();
        }