public int ScheduleJobForExportDocuments(long matterId, long dataSetId, long projectId, DocumentQueryContext queryContext)
 {
     return 10;
 }
        /// <summary>
        /// Gets document list for a page.
        /// </summary>
        /// <param name="docList">The sorted or filtered document list.</param>
        /// <param name="queryContext">The query context.</param>
        /// <returns>The page documents list</returns>
        private static DocumentList PageNavigationDocumentList(DocumentList docList, DocumentQueryContext queryContext)
        {
            if (queryContext != null)
            {
                var start = ((queryContext.PageIndex - 1) * queryContext.PageSize);
                var end = start + queryContext.PageSize;
                var count = queryContext.PageSize;


                if (end > docList.Total)
                {
                    count = docList.Total - start;
                }

                docList.Documents = docList.Documents.GetRange(start, count);
                docList.Total = docList.Documents.Count;
            }

            return docList;
        }        
        public AnalysisSetDocumentInfo GetUncodedDocument(long orgId, long matterId, long dataSetId,
            long projectId, string documentRefId, DocumentQueryContext searchContext)
        {
            var result = new AnalysisSetDocumentInfo();
            var docList = new DocumentList();
            if(searchContext.AnalysisSet.Type == AnalysisSetType.ControlSet)
            {
                docList.Documents = mockDocuments.Documents.Where(d => d.Fields[ControlDocumentIndex].Value == "1").ToList();
                docList.Total = docList.Documents.Count;
            }
            if (searchContext.AnalysisSet.Type == AnalysisSetType.TrainingSet)
            {
                docList.Documents = mockDocuments.Documents.Where(d => d.Fields[TrainingDocumentIndex].Name == searchContext.AnalysisSet.Name).ToList();
                docList.Total = docList.Documents.Count;
            }
            if (searchContext.AnalysisSet.Type == AnalysisSetType.QcSet)
            {
                docList.Documents = mockDocuments.Documents.Where(d => d.Fields[QualityDocumentIndex].Name == searchContext.AnalysisSet.Name).ToList();
                docList.Total = docList.Documents.Count;
            }
            result.TotalDocumentCount = docList.Documents.Count;

            var doc =
                docList.Documents.Find(
                    d => d.Fields.Exists(f => (f.DisplayName == "Reviewer Category" && f.Value == NotCoded)));

            if (doc != null)
            {
                result.DocumentReferenceId = doc.ReferenceId;
                result.ProjectName = "Predictive Coding Project";
                result.DocumentText = "Mock Document " + doc.Id + " - Concordance® Evolution feeds your need for speed during document review. Litigation support professionals and document reviewers told us what they need most in an e-discovery review engine: outstanding speed, capacity and ease of use. Get it all with LexisNexis® Concordance® Evolution. Concordance® puts you in the driver’s seat, maintaining control and accelerating the review process to enhance client service and improve efficiency.";
                result.DocumentIndexId = Convert.ToInt32(doc.Id);
                result.ReviewerCategory = NotCoded;
                var dcnField = doc.Fields.Find(f => (f.DisplayName == "DCN"));
                if (dcnField != null)
                {
                    result.DocumentDcn = dcnField.Value;
                }
            }

            var reviewStatus = doc != null ? Status.Inprogress : Status.Completed;
            MockWorkflowState.SetReviewStatus(searchContext.AnalysisSet.Type, reviewStatus);

            return result;
        }
        private static DocumentList UpdatePredictedCategoryValue(DocumentList docList, DocumentQueryContext queryContext)
        {
            if (queryContext.Filters.Count == 2 && docList.Total > 0)
            {
                var totalDocs = docList.Total;
                var count = queryContext.Filters[0].Value == Relevant ? queryContext.Filters[1].Value == Relevant ? mockDiscrepancies[0][0] : mockDiscrepancies[0][1] : queryContext.Filters[1].Value == Relevant ? mockDiscrepancies[1][0] : mockDiscrepancies[1][1];
                if (count > totalDocs)
                    count = totalDocs;
                docList.Documents = docList.Documents.GetRange(0, count);
                docList.Total = docList.Documents.Count;
                foreach (var doc in docList.Documents)
                {
                    doc.Fields[PredictedCategoryIndex].Value = queryContext.Filters[1].Value;
                }

            }

            return docList;
        }
        private static DocumentList FilterDocumentList(DocumentList docList, DocumentQueryContext queryContext)
        {
            if (queryContext != null)
            { 
                if (queryContext.KeyWord.Length > 0)
                {
                    docList.Documents = docList.Documents.Where(d => d.Fields[ReviewerCategoryIndex].Value.Contains(queryContext.KeyWord)).ToList();
                    docList.Total = docList.Documents.Count;
                }

                if (queryContext.Filters.Count > 0)
                {
                    docList.Documents = docList.Documents.Where(d => d.Fields[ReviewerCategoryIndex].Value == queryContext.Filters[0].Value).ToList();
                    docList.Total = docList.Documents.Count;

                    docList=UpdatePredictedCategoryValue(docList, queryContext);
                 
                }

                if (queryContext.Sort.Count > 0 && docList.Documents.Count > 0)
                {
                    var index = docList.Documents[0].Fields.FindIndex(f => f.Name == queryContext.Sort[0].Name);
                    if (queryContext.Sort[0].Order == SortOrder.Ascending)
                    {
                        docList.Documents = docList.Documents.Where(d => d.Fields[index].Name == queryContext.Sort[0].Name).OrderBy(o => o.Fields[index].Value).ToList();
                    }
                    if (queryContext.Sort[0].Order == SortOrder.Descending)
                    {
                        docList.Documents = docList.Documents.Where(d => d.Fields[index].Name == queryContext.Sort[0].Name).OrderByDescending(o => o.Fields[index].Value).ToList();
                    }
                }
                
            }

            return docList;
        }
        /// <summary>
        /// Gets the documents.
        /// </summary>
        /// <param name="matterId">The matter identifier.</param>
        /// <param name="dataSetId">The data set identifier.</param>
        /// <param name="projectId">The project identifier.</param>
        /// <param name="analysisSet">The analysis set.</param>
        /// <param name="queryContext">The query context.</param>
        /// <returns></returns>
        public DocumentList GetDocuments(long matterId, long dataSetId, long projectId, string analysisSet, DocumentQueryContext queryContext)
        {

            var docList = new DocumentList();
           
            if(mockDocuments == null )
            {
                var resourceName = string.Format(CultureInfo.InvariantCulture, "{0}.matter_{1}-dataset_{2}-project_{3}-documents.json",
                             MockDataNameSpace, matterId, dataSetId, projectId);

                var mockData = GetEmbeddedResource(resourceName);
                mockDocuments = JsonConvert.DeserializeObject<DocumentList>(mockData);
             
            }
            if(analysisSet == "controlset")
            {
                docList.Documents = mockDocuments.Documents.Where(d => d.Fields[ControlDocumentIndex].Value == "1").ToList();
                docList.Total = docList.Documents.Count;
            }
            if(analysisSet ==  "trainingset")
            {
                docList.Documents = mockDocuments.Documents.Where(d => d.Fields[TrainingDocumentIndex].Name == queryContext.AnalysisSet.Name).ToList();
                docList.Total = docList.Documents.Count;
            }
            if (analysisSet == "qcset")
            {
                docList.Documents = mockDocuments.Documents.Where(d => d.Fields[QualityDocumentIndex].Name == queryContext.AnalysisSet.Name).ToList();
                docList.Total = docList.Documents.Count;
            }
            if (analysisSet == "alldocuments")
            {
                docList.Documents = mockDocuments.Documents;
                docList.Total = docList.Documents.Count;
            }
            
            docList = FilterDocumentList(docList, queryContext);

            var pageDocuments = PageNavigationDocumentList(docList, queryContext);
            return pageDocuments;           
          
        }
 private static DocumentQueryContext CreateQueryContext(AnalysisSetType analysisSetType, string analysisSetName)
 {
     var queryContext = new DocumentQueryContext();
     queryContext.AnalysisSet = new AnalysisSet();
     queryContext.AnalysisSet.Name = analysisSetName;
     queryContext.AnalysisSet.Type = analysisSetType;
     queryContext.KeyWord = "";
     queryContext.Filters = new List<Field>();
     queryContext.Sort = new List<Sort>();
     queryContext.MatterId = 1;
     queryContext.DatasetId = 1;
     queryContext.ProjectId = 1;
     queryContext.PageIndex = 1;
     queryContext.PageSize = 500;
     return queryContext;
 }
 public void AutoCodeTruthSet(string matterId, string dataSetId, string projectId,
     string analysisSet, DocumentQueryContext documentQuery, string truthsetFieldName, string relevantFieldValue)
 {
     //No need of mock implementation for this method
 }