//************************************************************************************************************************

        private List <LanguageData> FetchItemVersionData(Item itemToProcess, string filterBy, string selectedLanguage)
        {
            return(SitecoreItemHelper.GetItemLanguages(itemToProcess, filterBy, selectedLanguage));
        }
        //************************************************************************************************************************

        private List <VersionData> ExtractItemVersions(string contentRoot, Database objDatabase, bool includeChildItems, string contentType, string filterBy, string selectedLanguage)
        {
            try
            {
                Log.Info("*********************Sitecore Version Tracker: START-Extracting Item Versions **********************", this);

                var objVersionData  = new List <VersionData>();
                var contentRootItem = SitecoreItemHelper.GetItemByPath(contentRoot, objDatabase);
                if (contentRootItem != null)
                {
                    if (includeChildItems)
                    {
                        // GetDescendants()- This can be optimized later (in next phase)...
                        // As next update we would be adding pagination also...
                        var allItems = contentRootItem.Axes.GetDescendants().ToList();
                        allItems.Add(contentRootItem);
                        foreach (var itemToProcess in allItems)
                        {
                            objVersionData.Add(new VersionData
                            {
                                ItemGuid         = itemToProcess.ID.ToGuid(),
                                ItemPath         = itemToProcess.Paths.FullPath,
                                ItemName         = itemToProcess.Name,
                                TotalLanguages   = SitecoreItemHelper.GetItemLanguageCount(itemToProcess),
                                IsPageItem       = SitecoreItemHelper.IsPageItem(itemToProcess),
                                EditorUrl        = itemToProcess.GetContentEditorUrl(),
                                LanguageDataList = FetchItemVersionData(itemToProcess, filterBy, selectedLanguage)
                            });
                        }
                    }
                    else
                    {
                        objVersionData.Add(new VersionData
                        {
                            ItemGuid         = contentRootItem.ID.ToGuid(),
                            ItemPath         = contentRootItem.Paths.FullPath,
                            ItemName         = contentRootItem.Name,
                            TotalLanguages   = SitecoreItemHelper.GetItemLanguageCount(contentRootItem),
                            IsPageItem       = SitecoreItemHelper.IsPageItem(contentRootItem),
                            EditorUrl        = contentRootItem.GetContentEditorUrl(),
                            LanguageDataList = FetchItemVersionData(contentRootItem, filterBy, selectedLanguage)
                        });
                    }

                    switch (contentType)
                    {
                    //filter by Page/data Item...
                    case "0":
                        return(objVersionData.Where(x => x.LanguageDataList.Any() && x.IsPageItem).ToList());

                    case "1":
                        return(objVersionData.Where(x => x.LanguageDataList.Any() && (!x.IsPageItem)).ToList());

                    default:
                        return(objVersionData.Where(x => x.LanguageDataList.Any()).ToList());
                    }
                }

                Log.Info("*********************Sitecore Version Tracker: END-Extracting Item Versions **********************", this);
                ltlReport.Text = CustomHelper.GetErrorMessage(Constants.Messages.ErrorOccured);
                return(new List <VersionData>());
            }
            catch (Exception ex)
            {
                Log.Error("*********************Sitecore Version Tracker | Error while extracting versions data **********************", ex.Message);
            }
            return(new List <VersionData>());
        }