public HttpResponseMessage UnsubscribeVenue(SubscribeVenueRequest request)
        {
            bool response = false;

            try
            {
                VenueDetails venueDetails = new VenueDetails();
                response = venueDetails.UnsubscribeVenue(request);
                return(Request.CreateResponse(HttpStatusCode.OK, response));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, false));
            }
        }
        public bool UnsubscribeVenue(SubscribeVenueRequest request)
        {
            bool response;

            try
            {
                Venue venue = new Venue();
                response = venue.UnsubscribeVenue(request);
                if (response)
                {
                    MakeFireBaseCalls makeFireBaseCalls = new MakeFireBaseCalls();
                    makeFireBaseCalls.DeleteFromTopic(Globals.eventdetails.FromVenue, null, request);
                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return(response);
        }
        public bool UnsubscribeVenue(SubscribeVenueRequest request)
        {
            try
            {
                string           getResponseJSON = "";
                FirebaseResponse getResponse     = firebaseDBVenue.Get("?orderBy=\"VenueId\"&equalTo=\"" + request.VenueId + "\"");
                if (getResponse.Success)
                {
                    if (getResponse.JSONContent != null && !getResponse.JSONContent.ToString().Equals("") && !getResponse.JSONContent.ToString().Equals("null") && !getResponse.JSONContent.ToString().Equals("{}"))
                    {
                        getResponseJSON = getResponse.JSONContent;
                        JObject jObj = JObject.Parse(getResponseJSON);
                        foreach (var result in jObj)
                        {
                            Console.WriteLine(result.Key);
                            getResponseJSON = result.Key;

                            if ((string)result.Value["VenueId"] == request.VenueId)
                            {
                                Console.WriteLine("DELETE Request");
                                FirebaseResponse deleteResponse = firebaseDBVenue
                                                                  .NodePath(getResponseJSON + "/InstanceId/" + request.InstanceId).Delete();
                                Console.WriteLine(deleteResponse.Success);

                                if (deleteResponse.Success)
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return(false);
        }
        public bool SubscribeVenue(SubscribeVenueRequest request)
        {
            try
            {
                string           getResponseJSON = "";
                bool             isExist         = false;
                int              count           = 0;
                JObject          jObj            = null;
                FirebaseResponse getResponse     = firebaseDBVenue.Get("?orderBy=\"VenueId\"&equalTo=\"" + request.VenueId + "\"");
                if (getResponse.Success)
                {
                    if (getResponse.JSONContent != null && !getResponse.JSONContent.ToString().Equals("") && !getResponse.JSONContent.ToString().Equals("null") && !getResponse.JSONContent.ToString().Equals("{}"))
                    {
                        getResponseJSON = getResponse.JSONContent;
                        jObj            = JObject.Parse(getResponseJSON);
                        count           = jObj.Count;
                        foreach (var result in jObj)
                        {
                            Console.WriteLine(result.Key);
                            getResponseJSON = (string)result.Value["VenueId"];

                            if (getResponseJSON == request.VenueId)
                            {
                                FirebaseResponse patchInstanceId = firebaseDBVenue
                                                                   .NodePath(result.Key + "/InstanceId")
                                                                   .Patch("{\"" + request.InstanceId + "\":\"true\"}");
                                Console.WriteLine(patchInstanceId.Success);
                                if (patchInstanceId.Success)
                                {
                                    isExist = true;
                                    return(true);
                                }
                            }
                        }
                    }
                }

                if (!isExist)
                {
                    jObj        = null;
                    count       = 0;
                    getResponse = firebaseDBVenue.Get();
                    if (getResponse.Success)
                    {
                        if (getResponse.JSONContent != null && !getResponse.JSONContent.ToString().Equals("") && !getResponse.JSONContent.ToString().Equals("null") && !getResponse.JSONContent.ToString().Equals("{}"))
                        {
                            getResponseJSON = getResponse.JSONContent;
                            jObj            = JObject.Parse(getResponseJSON);
                            count           = jObj.Count;
                        }
                    }
                    Console.WriteLine("Patch Login Request");
                    FirebaseResponse patchRequest = firebaseDBVenue.Patch("{\"V" + (count + 1) + "\":{\"VenueId\":\"" + request.VenueId + "\",\"VenueName\":\"" + request.VenueName + "\",\"InstanceId\":{\"" + request.InstanceId + "\":\"true\"}}}");
                    Console.WriteLine(patchRequest.Success);
                    if (patchRequest.Success)
                    {
                        return(true);
                    }
                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return(false);
        }
        public string GetSubscribedVenue(LoginRequest request)
        {
            string response = "";

            try
            {
                string getResponseJSON = "";
                IList <SubscribeVenueRequest> venueList = new List <SubscribeVenueRequest>();
                int              count       = 0;
                JObject          jObj        = null;
                FirebaseResponse getResponse = firebaseDBVenue.Get();
                if (getResponse.Success)
                {
                    if (getResponse.JSONContent != null && !getResponse.JSONContent.ToString().Equals("") && !getResponse.JSONContent.ToString().Equals("null") && !getResponse.JSONContent.ToString().Equals("{}"))
                    {
                        getResponseJSON = getResponse.JSONContent;
                        jObj            = JObject.Parse(getResponseJSON);
                        count           = jObj.Count;
                        foreach (var result in jObj)
                        {
                            SubscribeVenueRequest subscribeRequest = null;
                            //Console.WriteLine(result.Key);
                            if (result.Value["InstanceId"] != null)
                            {
                                getResponseJSON = result.Value["InstanceId"].ToString();
                            }
                            else
                            {
                                getResponseJSON = "";
                            }

                            if (!getResponseJSON.ToString().Equals("") && !getResponseJSON.ToString().Equals("null") && !getResponseJSON.ToString().Equals("{}"))
                            {
                                JObject instanceJson = JObject.Parse(getResponseJSON);
                                Console.WriteLine(getResponseJSON);
                                foreach (var instances in instanceJson)
                                {
                                    Console.WriteLine(instances.Key);
                                    if (!instances.Key.Equals("") && (instances.Key == request.InstanceId))
                                    {
                                        subscribeRequest           = new SubscribeVenueRequest();
                                        subscribeRequest.VenueId   = result.Value["VenueId"].ToString();
                                        subscribeRequest.VenueName = result.Value["VenueName"].ToString();
                                        venueList.Add(subscribeRequest);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }

                if (venueList.Count > 0)
                {
                    var json = new JavaScriptSerializer().Serialize(venueList);
                    response = json.ToString();
                }
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return(response);
        }
        public string DeleteFromTopic(Globals.eventdetails eventdetails, SubscribeEventRequest subscribeEvent = null, SubscribeVenueRequest subscribeVenue = null)
        {
            string response   = string.Empty;
            string EventId    = string.Empty;
            string InstanceId = string.Empty;

            try
            {
                if (eventdetails == Globals.eventdetails.FromEvent)
                {
                    EventId    = subscribeEvent.EventId;
                    InstanceId = subscribeEvent.InstanceId;
                }
                else if (eventdetails == Globals.eventdetails.FromVenue)
                {
                    EventId    = subscribeVenue.VenueId;
                    InstanceId = subscribeVenue.InstanceId;
                }

                WebRequest tRequest = WebRequest.Create(URLConstants.FirebaseUnSubscribeTopic);
                tRequest.Method      = "post";
                tRequest.ContentType = "application/json";
                var data = new
                {
                    to = "/topics/" + EventId,
                    registration_tokens = new string[] { InstanceId }
                };

                var    json      = JsonConvert.SerializeObject(data);
                Byte[] byteArray = Encoding.UTF8.GetBytes(json);
                tRequest.Headers.Add(string.Format("Authorization: key={0}", serverKey));
                tRequest.ContentLength = byteArray.Length;

                using (Stream dataStream = tRequest.GetRequestStream())
                {
                    dataStream.Write(byteArray, 0, byteArray.Length);
                    using (WebResponse tResponse = tRequest.GetResponse())
                    {
                        using (Stream dataStreamResponse = tResponse.GetResponseStream())
                        {
                            using (StreamReader tReader = new StreamReader(dataStreamResponse))
                            {
                                String sResponseFromServer = tReader.ReadToEnd();
                                string str = sResponseFromServer;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(response);
        }
        public string AddtoTopic(Globals.eventdetails eventdetails, SubscribeEventRequest subscribeEvent = null, SubscribeVenueRequest subscribeVenue = null)
        {
            string response   = string.Empty;
            string EventId    = string.Empty;
            string InstanceId = string.Empty;

            try
            {
                if (eventdetails == Globals.eventdetails.FromEvent)
                {
                    EventId    = subscribeEvent.EventId;
                    InstanceId = subscribeEvent.InstanceId;
                }
                else if (eventdetails == Globals.eventdetails.FromVenue)
                {
                    EventId    = subscribeVenue.VenueId;
                    InstanceId = subscribeVenue.InstanceId;
                }

                WebRequest tRequest = WebRequest.Create(URLConstants.FirebaseSubscribeTopic + "" + InstanceId + "/rel/topics/" + EventId);
                tRequest.Method      = "post";
                tRequest.ContentType = "application/json";
                tRequest.Headers.Add(string.Format("Authorization: key={0}", serverKey));
                tRequest.ContentLength = 0;

                using (WebResponse tResponse = tRequest.GetResponse())
                {
                    using (Stream dataStreamResponse = tResponse.GetResponseStream())
                    {
                        using (StreamReader tReader = new StreamReader(dataStreamResponse))
                        {
                            String sResponseFromServer = tReader.ReadToEnd();
                            string str = sResponseFromServer;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(response);
        }