private async void GetChatList()
        {
            try
            {
                chatlistdetail = await FirebaseChatHelper.GetChatForGroup("GroupChat", user_id, JobData.job_id);
            }
            catch (Exception ex)
            {
                chatlistdetail = new List <ChatDetailListModel>();
                //await MaterialDialog.Instance.SnackbarAsync(AppResource.error_ServerError, 3000);
            }

            if (AllChatDetailList != null && AllChatDetailList.Count == chatlistdetail.Count)
            {
            }
            else
            {
                AllChatDetailList = new ObservableCollection <ChatDetailListModel>(chatlistdetail);
                ChatDetailList    = AllChatDetailList;
                COUNT             = ChatDetailList.Count;
                MessagingCenter.Send("", "ScrollToEnd");
                MessagingCenter.Unsubscribe <string, int>(this, "ChatDetailTitle");


                var msgItem = new GroupChatDBModel()
                {
                    GroupJobId       = JobData.job_id,
                    UserMessagesList = ChatDetailList
                };
                if (groupChatMessagesDbService.IsGroupChatPresentInDB())
                {
                    var newmsgItem = groupChatMessagesDbService.ReadAllItems().Where(x => x.GroupJobId == JobData.job_id).ToList();
                    if (newmsgItem != null && newmsgItem.Count > 0)
                    {
                        var       msgID  = newmsgItem.FirstOrDefault().ID;
                        BsonValue bsonid = msgID;
                        groupChatMessagesDbService.UpdateGroupChatDataInDb(bsonid, msgItem);
                    }
                    else
                    {
                        groupChatMessagesDbService.CreateGroupChatDataInDB(msgItem);
                    }
                }
                else
                {
                    groupChatMessagesDbService.CreateGroupChatDataInDB(msgItem);
                }
            }
            if (ChatDetailList != null && ChatDetailList.Count > 0)
            {
                ToolbarIcon = "resource://Khadamat_CustomerApp.SvgImages.toolbar.svg";
            }
            else
            {
                ToolbarIcon = string.Empty;
            }

            chatTimer = new Timer(_ => UpdateChatFromFirebase(), null, 0, 1000);
        }
        private async void UpdateChatFromFirebase()
        {
            try
            {
                try
                {
                    supportchatlistdetail = await FirebaseChatHelper.GetChatForUserID(user_id, recieverUserId : RecieverId);
                }
                catch (Exception ex)
                {
                    supportchatlistdetail = new List <SingleChatListModel>();
                }
                //var _sortedlist = supportchatlistdetail.OrderBy(x => x.TimeStamp).ToList();
                //supportchatlistdetail = _sortedlist;
                if (supportchatlistdetail.Count > SupportChatList.Count)
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        MakeChatRead();
                    });
                    updatesupportchatlistdetail = supportchatlistdetail.Skip(SupportChatList.Count).ToList();
                    try
                    {
                        foreach (var item in updatesupportchatlistdetail)
                        {
                            //if (!string.IsNullOrEmpty(item.image_url) && !string.IsNullOrWhiteSpace(item.image_url))
                            //{
                            //    item.displayimage_url = new UriImageSource()
                            //    {
                            //        Uri = new Uri(item.image_url),
                            //        CachingEnabled = true,
                            //        CacheValidity = new TimeSpan(5, 0, 0, 0)
                            //    };
                            //}
                            AllSupportChatList.Add(item);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    SupportChatList = AllSupportChatList;
                    COUNT           = SupportChatList.Count;
                    MessagingCenter.Send("", "ScrollToEnd");


                    var msgItem = new SingleChatDBModel()
                    {
                        SingleMessageName = ChatDetailTitle,
                        UserMessagesList  = SupportChatList,
                        RecieverId        = RecieverId
                    };
                    if (singleChatMessagesDbService.IsSingleChatPresentInDB())
                    {
                        var newmsgItem = singleChatMessagesDbService.ReadAllItems().Where(x => x.RecieverId == RecieverId).ToList();
                        if (newmsgItem != null && newmsgItem.Count > 0)
                        {
                            var msgID = newmsgItem.FirstOrDefault().ID;
                            msgItem.ID = msgID;
                            BsonValue id = new BsonValue(msgID);
                            singleChatMessagesDbService.UpdateSingleChatDataInDb(id, msgItem);
                        }
                        else
                        {
                            singleChatMessagesDbService.CreateSingleChatDataInDB(msgItem);
                        }
                    }
                    else
                    {
                        singleChatMessagesDbService.CreateSingleChatDataInDB(msgItem);
                    }
                }


                if (SupportChatList != null && SupportChatList.Count > 0)
                {
                    DeleteChatIcon = "resource://Khadamat_CustomerApp.SvgImages.delete.svg";
                }
                else
                {
                    DeleteChatIcon = string.Empty;
                }
            }
            catch (Exception ex)
            {
            }
        }
        public async void AddMessageFirebase(SingleChatListModel item)
        {
            try
            {
                if (Common.CheckConnection())
                {
                    var request = new ChatDetailModelApi()
                    {
                        from_user_id = user_id,
                        to_user_id   = RecieverId
                    };
                    Chatdetailresponse response;
                    try
                    {
                        response = await _webApiRestClient.PostAsync <ChatDetailModelApi, Chatdetailresponse>(ApiUrl.AddChatRequest, request);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("SendMsgApi_Exception:- " + ex.Message);
                        response    = null;
                        IsBackPress = true;
                        //await MaterialDialog.Instance.SnackbarAsync(message: AppResource.error_ServerError, msDuration: 3000);
                        return;
                    }
                    if (response != null)
                    {
                        if (response.status)
                        {
                            MessagingCenter.Send("", "ScrollToEnd");
                            MessageEntry = string.Empty;
                            var data = await FirebaseChatHelper.AddChatMessage(item);
                        }
                        else if (response.message == null)
                        {
                            MessagingCenter.Send("", "ScrollToEnd");
                            MessageEntry = string.Empty;
                            var data = await FirebaseChatHelper.AddChatMessage(item);
                        }
                        else
                        {
                            await MaterialDialog.Instance.SnackbarAsync(message : response.message,
                                                                        msDuration : 3000);
                        }

                        var msgItem = new SingleChatDBModel()
                        {
                            SingleMessageName = ChatDetailTitle,
                            UserMessagesList  = SupportChatList,
                            RecieverId        = RecieverId
                        };
                        if (singleChatMessagesDbService.IsSingleChatPresentInDB())
                        {
                            var newmsgItem = singleChatMessagesDbService.ReadAllItems().Where(x => x.RecieverId == RecieverId).ToList();
                            if (newmsgItem != null && newmsgItem.Count > 0)
                            {
                                var msgID = newmsgItem.FirstOrDefault().ID;
                                msgItem.ID = msgID;
                                BsonValue id = new BsonValue(msgID);
                                singleChatMessagesDbService.UpdateSingleChatDataInDb(id, msgItem);
                            }
                            else
                            {
                                singleChatMessagesDbService.CreateSingleChatDataInDB(msgItem);
                            }
                        }
                        else
                        {
                            singleChatMessagesDbService.CreateSingleChatDataInDB(msgItem);
                        }
                    }
                    IsBackPress = true;
                }
                else
                {
                    await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_InternetError,
                                                                msDuration : 3000);
                }
            }
            catch (Exception ex)
            {
                //await MaterialDialog.Instance.SnackbarAsync(message: ex.Message,
                //                            msDuration: 3000);
                IsBackPress = true;
                Console.WriteLine("SendMsgCommand_Exception:- " + ex.Message);
            }
        }
        public async void AddMessagetoFirebase()
        {
            try
            {
                if (Common.CheckConnection())
                {
                    var item = new ChatDetailListModel()
                    {
                        sender_user_id     = user_id,
                        job_id             = JobData.job_id,
                        coordinator_id     = JobData.coordinator_id,
                        worker_id          = JobData.worker_id,
                        customer_id        = null,
                        sender_user_Name   = user_name,
                        coordinator_Name   = !string.IsNullOrEmpty(JobData.coordinator_Name) ? AppResource.coordinator_Name : JobData.coordinator_Name,
                        job_Name           = ChatDetailTitle,
                        receiver_user_Name = null,
                        worker_Name        = JobData.worker_Name,
                        customer_Name      = null,
                        image_url          = null,
                        file_url           = null,
                        is_file            = false,
                        is_image           = false,
                        is_loading         = false,
                        IsViewBtnVisible   = false,
                        is_message         = true,
                        msg_datetime       = DateTime.Now,
                        user_message       = MessageEntry,
                        user_message_time  = DateTime.Now.ToString("dd/MM/yyyy, hh:mm:ss tt"),
                        is_sender          = true,
                        time_stamp         = DependencyService.Get <IGetTimeStamp>().TimeStamp()
                    };
                    //var request = new ChatDetailModelApi()
                    //{
                    //    from_user_id = user_id,
                    //    to_user_id = JobData.job_id
                    //};
                    Chatdetailresponse response;
                    try
                    {
                        MessageEntry = string.Empty;
                        response     = await _webApiRestClient.GetAsync <Chatdetailresponse>(string.Format(ApiUrl.AddGroupChatRequest, JobData.job_id, Convert.ToInt32(Enums.UserTypeEnum.Customer)));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("SendMsgApi_Exception:- " + ex.Message);
                        response = null;
                        await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_ServerError, msDuration : 3000);

                        return;
                    }
                    if (response != null)
                    {
                        if (response.status)
                        {
                            try
                            {
                                AllChatDetailList.Add(item);
                            }
                            catch (Exception ex)
                            {
                            }
                            ChatDetailList = AllChatDetailList;
                            MessagingCenter.Send("", "ScrollToEnd");
                            MessageEntry = string.Empty;
                            var data = await FirebaseChatHelper.AddChatMessageForGroup(item, "GroupChat");
                        }
                        else if (response.message == null)
                        {
                            try
                            {
                                AllChatDetailList.Add(item);
                            }
                            catch (Exception ex)
                            {
                            }

                            ChatDetailList = AllChatDetailList;
                            MessagingCenter.Send("", "ScrollToEnd");
                            MessageEntry = string.Empty;
                            var data = await FirebaseChatHelper.AddChatMessageForGroup(item, "GroupChat");
                        }
                        else
                        {
                            await MaterialDialog.Instance.SnackbarAsync(message : response.message,
                                                                        msDuration : 3000);
                        }

                        var msgItem = new GroupChatDBModel()
                        {
                            GroupJobId       = JobData.job_id,
                            UserMessagesList = ChatDetailList
                        };
                        if (groupChatMessagesDbService.IsGroupChatPresentInDB())
                        {
                            var newmsgItem = groupChatMessagesDbService.ReadAllItems().Where(x => x.GroupJobId == JobData.job_id).ToList();
                            if (newmsgItem != null && newmsgItem.Count > 0)
                            {
                                var msgID = newmsgItem.FirstOrDefault().ID;
                                msgItem.ID = msgID;
                                BsonValue bsonid = msgID;
                                groupChatMessagesDbService.UpdateGroupChatDataInDb(bsonid, msgItem);
                            }
                            else
                            {
                                groupChatMessagesDbService.CreateGroupChatDataInDB(msgItem);
                            }
                        }
                        else
                        {
                            groupChatMessagesDbService.CreateGroupChatDataInDB(msgItem);
                        }
                    }
                }
                else
                {
                    await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_InternetError,
                                                                msDuration : 3000);
                }
            }
            catch (Exception ex)
            {
                //await MaterialDialog.Instance.SnackbarAsync(message: ex.Message,
                //                            msDuration: 3000);
                Console.WriteLine("SendMsgCommand_Exception:- " + ex.Message);
            }
        }
        public async void AddMessageFirebase(ChatDetailListModel item)
        {
            try
            {
                if (Common.CheckConnection())
                {
                    Chatdetailresponse response;
                    try
                    {
                        response = await _webApiRestClient.GetAsync <Chatdetailresponse>(string.Format(ApiUrl.AddGroupChatRequest, JobData.job_id, Convert.ToInt32(Enums.UserTypeEnum.Customer)));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("SendMsgApi_Exception:- " + ex.Message);
                        response    = null;
                        IsBackPress = true;
                        await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_ServerError, msDuration : 3000);

                        return;
                    }
                    if (response != null)
                    {
                        if (response.status)
                        {
                            MessagingCenter.Send("", "ScrollToEnd");
                            MessageEntry = string.Empty;
                            var data = await FirebaseChatHelper.AddChatMessageForGroup(item, "GroupChat");
                        }
                        else if (response.message == null)
                        {
                            MessagingCenter.Send("", "ScrollToEnd");
                            MessageEntry = string.Empty;
                            var data = await FirebaseChatHelper.AddChatMessageForGroup(item, "GroupChat");
                        }
                        else
                        {
                            await MaterialDialog.Instance.SnackbarAsync(message : response.message,
                                                                        msDuration : 3000);
                        }


                        var msgItem = new GroupChatDBModel()
                        {
                            GroupJobId       = JobData.job_id,
                            UserMessagesList = ChatDetailList
                        };
                        if (groupChatMessagesDbService.IsGroupChatPresentInDB())
                        {
                            var newmsgItem = groupChatMessagesDbService.ReadAllItems().Where(x => x.GroupJobId == JobData.job_id).ToList();
                            if (newmsgItem != null && newmsgItem.Count > 0)
                            {
                                var msgID = newmsgItem.FirstOrDefault().ID;
                                msgItem.ID = msgID;
                                BsonValue bsonid = msgID;
                                groupChatMessagesDbService.UpdateGroupChatDataInDb(bsonid, msgItem);
                            }
                            else
                            {
                                groupChatMessagesDbService.CreateGroupChatDataInDB(msgItem);
                            }
                        }
                        else
                        {
                            groupChatMessagesDbService.CreateGroupChatDataInDB(msgItem);
                        }
                    }

                    IsBackPress = true;
                }
                else
                {
                    await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_InternetError,
                                                                msDuration : 3000);
                }
            }
            catch (Exception ex)
            {
                //await MaterialDialog.Instance.SnackbarAsync(message: ex.Message,
                //                            msDuration: 3000);
                IsBackPress = true;
                Console.WriteLine("SendMsgCommand_Exception:- " + ex.Message);
            }
        }
        private async void UpdateChatFromFirebase()
        {
            try
            {
                try
                {
                    chatlistdetail = await FirebaseChatHelper.GetChatForGroup("GroupChat", user_id, JobData.job_id);
                }
                catch (Exception ex)
                {
                    chatlistdetail = new List <ChatDetailListModel>();
                }
                if (chatlistdetail.Count > ChatDetailList.Count)
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        MakeGroupChatRead();
                    });
                    updatechatlistdetail = chatlistdetail.Skip(ChatDetailList.Count).ToList();
                    try
                    {
                        foreach (var item in updatechatlistdetail)
                        {
                            AllChatDetailList.Add(item);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    ChatDetailList = AllChatDetailList;
                    COUNT          = ChatDetailList.Count;
                    MessagingCenter.Send("", "ScrollToEnd");


                    var msgItem = new GroupChatDBModel()
                    {
                        GroupJobId       = JobData.job_id,
                        UserMessagesList = ChatDetailList
                    };
                    if (groupChatMessagesDbService.IsGroupChatPresentInDB())
                    {
                        var newmsgItem = groupChatMessagesDbService.ReadAllItems().Where(x => x.GroupJobId == JobData.job_id).ToList();
                        if (newmsgItem != newmsgItem)
                        {
                            var       msgID  = newmsgItem.FirstOrDefault().ID;
                            BsonValue bsonid = msgID;
                            groupChatMessagesDbService.UpdateGroupChatDataInDb(bsonid, msgItem);
                        }
                        else
                        {
                            groupChatMessagesDbService.CreateGroupChatDataInDB(msgItem);
                        }
                    }
                    else
                    {
                        groupChatMessagesDbService.CreateGroupChatDataInDB(msgItem);
                    }
                }

                if (ChatDetailList != null && ChatDetailList.Count > 0)
                {
                    ToolbarIcon = "resource://Khadamat_CustomerApp.SvgImages.toolbar.svg";
                }
                else
                {
                    ToolbarIcon = string.Empty;
                }
            }
            catch (Exception ex)
            {
            }
        }
        private async void DeleteChat(ChatUserModel data)
        {
            if (data.job_request_id != null && data.job_request_id.Value > 0)
            {
                var deleteChatResult = await App.Current.MainPage.DisplayAlert(AppResource.DeleteGroup, AppResource.DeleteGroupConfirm, AppResource.Yes, AppResource.No);

                if (deleteChatResult)
                {
                    try
                    {
                        if (Common.CheckConnection())
                        {
                            await App.Current.MainPage.Navigation.PushPopupAsync(new LoaderPopup());

                            Chatdetailresponse response;
                            var request = new GroupChatreadRequestModel()
                            {
                                user_id        = user_id,
                                job_request_id = data.job_request_id.Value
                            };
                            try
                            {
                                response = await _webApiRestClient.PostAsync <GroupChatreadRequestModel, Chatdetailresponse>(ApiUrl.DeleteGroupChatRequest, request);
                            }
                            catch (Exception ex)
                            {
                                response = null;
                                LoaderPopup.CloseAllPopup();
                                IsRefreshing = false;
                                await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_ServerError, msDuration : 3000);

                                return;
                            }
                            if (response != null)
                            {
                                if (response.status)
                                {
                                    await FirebaseChatHelper.DeleteGroupChat("GroupChat", user_id, data.job_request_id.Value);

                                    GetChat();
                                }
                                else
                                {
                                    await MaterialDialog.Instance.SnackbarAsync(message : response.message,
                                                                                msDuration : 3000);
                                }
                            }
                        }
                        else
                        {
                            await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_InternetError, msDuration : 3000);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    finally
                    {
                        //await Task.Delay(1500);
                        LoaderPopup.CloseAllPopup();
                        IsRefreshing = false;
                    }
                }
            }
            else
            {
                var deleteChatResult = await App.Current.MainPage.DisplayAlert(AppResource.DeleteChat, AppResource.DeleteChatConfirm, AppResource.Yes, AppResource.No);

                if (deleteChatResult)
                {
                    try
                    {
                        if (Common.CheckConnection())
                        {
                            await App.Current.MainPage.Navigation.PushPopupAsync(new LoaderPopup());

                            Chatdetailresponse response;
                            var request = new ChatDetailModelApi()
                            {
                                from_user_id = user_id,
                                to_user_id   = data.user_id.Value
                            };
                            try
                            {
                                response = await _webApiRestClient.PostAsync <ChatDetailModelApi, Chatdetailresponse>(ApiUrl.DeleteChatRequest, request);
                            }
                            catch (Exception ex)
                            {
                                response = null;
                                LoaderPopup.CloseAllPopup();
                                IsRefreshing = false;
                                await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_ServerError, msDuration : 3000);

                                return;
                            }
                            if (response != null)
                            {
                                if (response.status)
                                {
                                    await FirebaseChatHelper.DeleteSingleChat("Chat", user_id, data.user_id.Value);

                                    GetChat();
                                }
                                else
                                {
                                    await MaterialDialog.Instance.SnackbarAsync(message : response.message,
                                                                                msDuration : 3000);
                                }
                            }
                        }
                        else
                        {
                            await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_InternetError, msDuration : 3000);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    finally
                    {
                        await Task.Delay(1500);

                        LoaderPopup.CloseAllPopup();
                        IsRefreshing = false;
                    }
                }
            }
        }