private void ShowReport(CodeAnalyzer.Interface.ICommonResults results, List <IFileSource> fileSourceList)
        {
            this.Dispatcher.Invoke(() => this.Hide(), DispatcherPriority.Background);
            ResultWindow resultWindow = new ResultWindow(results, fileSourceList);

            resultWindow.Dispatcher.Invoke(() => resultWindow.ShowDialog(), DispatcherPriority.Normal);
            this.Dispatcher.Invoke(() => this.Close(), DispatcherPriority.Background);
        }
        private void FillFileDataGrid(CodeAnalyzer.Interface.ICommonResults results)
        {
            int i    = 1;
            var list = new List <FileGridItem>();

            foreach (var result in results.Results)
            {
                var fileSource = result.File;
                var fileNames  = result.LinkedFiles.Select(x => x.GetFileName());
                list.Add(new FileGridItem(i, $"{fileSource.GetFileName()}", $"{result.Report}", fileNames.ToList()));
                i++;
            }
            fileGrid.ItemsSource = list;
            BrowserBehavior.SetHtml(totalReportWB, GenerateTotal(results, _fileSourceList));
        }
        private string GenerateTotal(CodeAnalyzer.Interface.ICommonResults results, List <IFileSource> _fileSourceList)
        {
            var recommendations = new List <string>();
            var sb = new StringBuilder();

            sb.AppendLine($"<html><meta http-equiv='Content-Type' content='text/html;charset=UTF-8'><body>");
            var totalFileCount  = _fileSourceList.Count;
            var fileDubleCount  = results.Results.Count(x => x.Report?.Contains("~=") ?? false);
            var filePercent     = fileDubleCount * 100 / totalFileCount;
            var fileResumeIndex = 0;

            if (filePercent > 80)
            {
                fileResumeIndex = 5;
            }
            else if (filePercent > 50)
            {
                fileResumeIndex = 4;
            }
            else if (filePercent > 30)
            {
                fileResumeIndex = 3;
            }
            else if (filePercent > 10)
            {
                fileResumeIndex = 2;
            }
            else if (filePercent > 0)
            {
                fileResumeIndex = 1;
            }
            if (filePercent > 75)
            {
                recommendations.Add("Слишком большая доля заимствованного кода, вероятно уже есть существующий аналог.");
            }

            var fileResume = fileResumeText[fileResumeIndex];

            sb.AppendLine("<h2>Отчёт по анализу исходного кода</h2>");
            sb.AppendLine("<table border=0 padding=4>");
            sb.AppendLine($"<tr><td>Общее количество проверенных файлов</td><td>{totalFileCount}</td></tr>");
            sb.AppendLine("<tr><th colspan=2>Проверка дублирования</th></tr>");
            sb.AppendLine($"<tr><td>Количество файлов с совпадениями</td><td>{fileDubleCount}</td></tr>");
            sb.AppendLine($"<tr><td>Процент файлов с совпадениями с базой кода</td><td>{filePercent}%</td></tr>");
            sb.AppendLine($"<tr><td>Вывод</td><td>{fileResume}</td></tr>");

            var fileMsSqlCount  = results.Results.Count(x => x.Report?.Contains("MSSQL") ?? false);
            var fileOracleCount = results.Results.Count(x => x.Report?.Contains("Oracle") ?? false);
            var fileDbCount     = results.Results.Count(x => (x.Report?.Contains("Oracle") ?? false) || (x.Report?.Contains("MSSQL") ?? false));

            var dbPercent     = fileDbCount * 100 / totalFileCount;
            var dbResumeIndex = 0;

            if (dbPercent > 30)
            {
                dbResumeIndex = 3;
            }
            else if (dbPercent > 15)
            {
                dbResumeIndex = 2;
            }
            else if (dbPercent > 0)
            {
                dbResumeIndex = 1;
            }

            if (fileDbCount > 0)
            {
                recommendations.Add("В ПО используются иностранные БД, лицензирование и обслуживание которых может стоить дорого.");
            }

            var dbResume = dbResumeText[dbResumeIndex];

            sb.AppendLine("<tr><th colspan=2>Проверка использования БД</th></tr>");
            sb.AppendLine($"<tr><td>Количество файлов работающих с БД</td><td>{fileDbCount}</td></tr>");
            sb.AppendLine($"<tr><td>Из них работает с MSSQL</td><td>{fileMsSqlCount}</td></tr>");
            sb.AppendLine($"<tr><td>Из них работает с Oracle</td><td>{fileOracleCount}</td></tr>");
            sb.AppendLine($"<tr><td>Процент файлов работающих с БД</td><td>{dbPercent}%</td></tr>");
            sb.AppendLine($"<tr><td>Вывод</td><td>{dbResume}</td></tr>");
            sb.AppendLine("</table>");

            var totalIndex  = fileResumeIndex + dbResumeIndex;
            var totalResume = "Отказать, продавца расстрелять";

            if (totalIndex <= 2)
            {
                totalResume = "Да, да, дайте две!";
            }
            else if (totalIndex <= 5)
            {
                totalResume = "Ну, если денег не жалко, то можно";
            }
            else if (totalIndex <= 7)
            {
                totalResume = "Можно, за откат в 50%";
            }

            sb.AppendLine($"<p><strong>Общий вывод:</strong> {totalResume}</p>");

            if (recommendations.Count > 0)
            {
                sb.AppendLine("<h3>Рекомендации</h3>");
                foreach (var s in recommendations)
                {
                    sb.AppendLine($"<p>{s}</p>");
                }
            }

            sb.AppendLine("</body></html>");

            return(sb.ToString());
        }
 public ResultWindow(CodeAnalyzer.Interface.ICommonResults results, List <CodeAnalyzer.Interface.IFileSource> fileSourceList)
 {
     InitializeComponent();
     _fileSourceList = fileSourceList;
     FillFileDataGrid(results);
 }