public static string RenderLists(List <List> lists, CustomFeature customFeature, IDataRenderer renderer)
        {
            if (lists.Count == 0)
            {
                return("");
            }
            string rendu = "";

            foreach (var list in lists)
            {
                rendu += RenderList(list, customFeature.ContentTypes, customFeature.SiteColumns, renderer);
                if (string.IsNullOrWhiteSpace(rendu))
                {
                    return("");
                }
                if (list.Views.Count > 0)
                {
                    var listViews = new List <string>();
                    foreach (var view in list.Views)
                    {
                        listViews.Add(view.Name);
                    }
                    rendu += renderer.RenderTitle("Vues :", 9) + new HTMLRenderer().RenderUnorderedList(listViews);
                }
            }
            return(renderer.RenderTitle("Listes :", 7) + rendu);
        }
        private static string RenderList(List list, List <ContentType> contentTypes, List <SiteColumn> siteColumns, IDataRenderer renderer)
        {
            var columnsTable = new DataTable();

            columnsTable.Header.Add("Colonne");
            columnsTable.Header.Add("Type");
            columnsTable.Header.Add("Remarque");
            var rows = new List <List <string> >();

            foreach (var item in list.ContentTypes)
            {
                var contentType = contentTypes.FirstOrDefault(ct => ct.Name == item);
                rows.AddRange(
                    GetContentTypeFields(contentType,
                                         siteColumns,
                                         list.SiteColumns,
                                         list.Fields,
                                         columnsTable));
            }
            columnsTable.Rows = rows;
            if (columnsTable.Rows.Count == 0)
            {
                return("");
            }
            return(renderer.RenderTitle($"Liste {list.Title} :", 8)
                   + renderer.RenderParagraphe(list.Description) + renderer.RenderTitle("Structure de données :", 9) + new HTMLRenderer().RenderTable(columnsTable));
        }
        public static string RenderWebApp(WebApplication webApp, IDataRenderer renderer)
        {
            var    tableDeMatiere = new TableDeMatiere();
            string entete         = RenderStyle() +
                                    renderer.RenderTitle("SONES - Portail SharePoint", 1) +
                                    renderer.RenderTitle("Documentation Fonctionnelles et Techniques\n***\n", 1);
            string t = renderer.RenderTitle("Introduction :", 2) +
                       renderer.RenderTitle("Applications web :", 2) +
                       renderer.RenderTitle("Sites :\n", 3);

            foreach (var site in webApp.Sites)
            {
                t += RenderSite(site, webApp.Features, tableDeMatiere, renderer);
            }
            return(entete + t);
        }
        private static string RenderFeature(CustomFeature feature, TableDeMatiere tableDeMatiere, IDataRenderer renderer)
        {
            string rendu = "";

            if (feature.DependentOn.Count > 0)
            {
                rendu += "Cette fonctionnalité depend des fonctionnalités suivantes :\n" +
                         new HTMLRenderer().RenderUnorderedList(feature.DependentOn);
            }
            rendu += RenderGroups(feature.Groups, renderer);
            rendu += RenderLists(feature.Lists, feature, renderer);
            string tF = string.Format("Fonctionnalité {0}", feature.Name);

            if (string.IsNullOrWhiteSpace(rendu))
            {
                return("");
            }
            return(renderer.RenderTitle(tF, 6) + rendu);
        }
        private static string RenderGroups(List <Group> groups, IDataRenderer renderer)
        {
            if (groups.Count == 0)
            {
                return("");
            }
            var groupTable = new DataTable();

            groupTable.Header.Add("Groupe");
            groupTable.Header.Add("Description");
            groupTable.Header.Add("Membres");
            foreach (var group in groups)
            {
                var row = new List <string>();
                row.Add(group.Name);
                row.Add(group.Description);
                var membres = new HTMLRenderer().RenderUnorderedList(group.Members);
                row.Add(membres);
                groupTable.Rows.Add(row);
            }
            return(renderer.RenderTitle("Groupes :", 7) + new HTMLRenderer().RenderTable(groupTable));
        }
        //public static string RenderTableOfContent(TableOfContent tableDeMatiere, IDataRenderer dataRenderer)
        //{
        //    int _lastLevel = 4;
        //    string _markdownTable = "";
        //    foreach (var titre in tableDeMatiere.Titres)
        //    {
        //        var titres = new List<string>();

        //        var title = dataRenderer.RenderLink(titre.Title, titre.LinkId);
        //        if (titre.Level == _lastLevel)
        //        {
        //            _markdownTable += "<ol type='I'><li>" + titre.Title + "</li>\n";
        //        }
        //    }
        //    return "</ol>" + _markdownTable;
        //}

        private static string RenderSite(Site site, List <CustomFeature> webAppFeatures, TableDeMatiere tableDeMatiere,
                                         IDataRenderer renderer)
        {
            var enable = "";
            var modele = "";

            switch (site.Template)
            {
            case "STS#1":
            {
                modele = "Blank Site(1033)";

                ;
                break;
            }

            case "STS#0":
            {
                modele = "Team Site (1033)";
                break;
            }

            case "GLOBAL#0":
            {
                modele = "Global template (1033)";
                break;
            }
            }
            string titre = string.Format("Site {0}", site.Name);
            string rendu = renderer.RenderTitle(titre, 4);

            rendu += string.Format(_formatSite, site.Description, modele);
            var fonctionnaliteSiteTable = new DataTable();

            fonctionnaliteSiteTable.Header.Add("Description");
            fonctionnaliteSiteTable.Header.Add("Activer");
            foreach (var sitefeature in site.Features)
            {
                if (sitefeature.Enable == true)
                {
                    enable = "Oui";
                }
                else
                {
                    enable = "Non";
                }
                var row = new List <string>();
                row.Add(sitefeature.Description);
                row.Add(enable);
                fonctionnaliteSiteTable.Rows.Add(row);
            }
            rendu += renderer.RenderTitle("Fonctionnalités du site", 5) + new HTMLRenderer().RenderTable(fonctionnaliteSiteTable);
            var fonctionnaliteWebTable = new DataTable();

            fonctionnaliteWebTable.Header.Add("Description");
            fonctionnaliteWebTable.Header.Add("Activer");
            foreach (var webfeature in site.WebFeatures)
            {
                if (webfeature.Enable == true)
                {
                    enable = "Oui";
                }
                else
                {
                    enable = "Non";
                }
                var row = new List <string>();
                row.Add(webfeature.Description);
                row.Add(enable);
                fonctionnaliteWebTable.Rows.Add(row);
            }
            rendu += renderer.RenderTitle("Fonctionnalités du web", 5) + new HTMLRenderer().RenderTable(fonctionnaliteWebTable);
            rendu += renderer.RenderTitle("Fonctionnalités personnalisées", 5);
            foreach (var customfeature in site.CustomFeatures)
            {
                var customFeatureInfo = webAppFeatures.FirstOrDefault(ft => ft.Name == customfeature);
                if (customFeatureInfo != null)
                {
                    rendu += RenderFeature(customFeatureInfo, tableDeMatiere, renderer);
                }
            }
            return(rendu);
        }