//public bool InitialMessages()
        //{
        //    Message message = new Message()
        //    {
        //        MessageText = "How Are You?",
        //        SentTime = System.DateTime.Now,
        //        ConversationID = 1,
        //        UserID = 1
        //    };
        //    _context.Messages.Add(message);
        //    _context.SaveChanges();
        //    message = new Message()
        //    {
        //        MessageText = "Are You Still Good?",
        //        SentTime = System.DateTime.Now.AddMinutes(1),
        //        ConversationID = 1,
        //        UserID = 1
        //    };
        //    _context.Messages.Add(message);
        //    _context.SaveChanges();
        //    message = new Message()
        //    {
        //        MessageText = "Im just fine",
        //        SentTime = System.DateTime.Now.AddMinutes(2),
        //        ConversationID = 1,
        //        UserID = 2
        //    };
        //    _context.Messages.Add(message);
        //    _context.SaveChanges();
        //    message = new Message()
        //    {
        //        MessageText = "How about you",
        //        SentTime = System.DateTime.Now.AddMinutes(1),
        //        ConversationID = 1,
        //        UserID = 2
        //    };
        //    _context.Messages.Add(message);
        //    _context.SaveChanges();
        //    return true;
        //}

        // CREATE NEW CONVERSATION
        public async Task <IActionResult> NewConversationAsync(int userId)
        {
            // Get UserID Of Sender
            var currentUserId = HttpContext.Session.GetInt32("userId");
            // Check If Receiver Existed
            var user = _context.Users.FirstOrDefault(u => u.ID == userId);

            if (user != null)
            {
                // Check If Conversation Already Existed
                var userConversationIdList = _context.UserConversations
                                             .Where(u => u.UserID == currentUserId).ToList();
                foreach (var i in userConversationIdList)
                {
                    var uConversation = _context.UserConversations
                                        .Include(u => u.Conversation)
                                        .Where(u => u.ConversationID == i.ConversationID).ToList();
                    foreach (var j in uConversation)
                    {
                        if (j.UserID == userId && j.Conversation.ConversationType == 0)
                        {
                            return(RedirectToAction("Home", "Messenger", new { id = j.ConversationID }));
                        }
                    }
                }
                // Create New Conversation
                Conversation conversation = new Conversation();
                DateTime     currentTime  = System.DateTime.Now;
                conversation.CreatedDate      = currentTime;
                conversation.ConversationType = 0;
                _context.Add(conversation);
                await _context.SaveChangesAsync();

                // Create New UserConversations
                // Get Conversation ID
                var conversationId = _context.Conversations
                                     .FirstOrDefault(c => c.CreatedDate == currentTime).ID;
                // Save User Conversations
                UserConversation uC1 = new UserConversation();
                uC1.ConversationID = conversationId;
                uC1.UserID         = (int)currentUserId;
                uC1.UserSeen       = 1;
                _context.Add(uC1);
                await _context.SaveChangesAsync();

                UserConversation uC2 = new UserConversation();
                uC2.ConversationID = conversationId;
                uC2.UserID         = userId;
                uC2.UserSeen       = 0;
                _context.Add(uC2);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Home", "Messenger", new { id = conversationId }));
            }
            return(NotFound());
        }
        public async Task <IActionResult> Create([Bind("id,name,created_at")] User user)
        {
            if (ModelState.IsValid)
            {
                _context.Add(user);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(user));
        }
        public JsonResult SendMessage()
        {
            if (HttpContext.Session.GetInt32("user") == null)
            {
                return(Json(new { status = "error", message = "User is not logged in" }));
            }

            var id = HttpContext.Session.GetInt32("user");

            // var currentUser = _context.User.FirstOrDefault(m => m.id == id);
            /// var currentUser = TempData["userData"] as User;
            var          contact   = Convert.ToInt32(Request.Form["contact"]);
            string       socket_id = Request.Form["socket_id"];
            Conversation convo     = new Conversation
            {
                sender_id   = (int)id,
                message     = Request.Form["message"],
                receiver_id = contact
            };

            _context.Add(convo);
            _context.SaveChanges();

            var conversationChannel = getConvoChannel((int)id, contact);

            pusher.TriggerAsync(
                conversationChannel,
                "new_message",
                convo,
                new TriggerOptions()
            {
                SocketId = socket_id
            });

            return(Json(convo));
        }