using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SDKDocGenerator.Writers
{
    public abstract class MethodBaseWriter : MemberWriter
    {
        readonly MethodBaseWrapper _info;

        protected MethodBaseWriter(GenerationManifest artifacts, FrameworkVersion version, MethodBaseWrapper info)
            : base(artifacts, version, info)
        {
            this._info = info;
        }

        protected override void AddParameters(System.IO.TextWriter writer)
        {
            var parameters = this._info.GetParameters();
            if (parameters.Count == 0)
                return;

            var ndoc = GetSummaryDocumentation();

            writer.WriteLine("<div class=\"sectionbody\">");
                writer.WriteLine("<div id=\"parameters\">");
                    writer.WriteLine("<h3><strong class=\"subHeading\">Parameters</strong></h3>");
                writer.WriteLine("</div>");

                foreach (var parameter in parameters)
                {
                    writer.WriteLine("<dl>");
                
                        writer.WriteLine("<dt>");
                            writer.WriteLine("<span class=\"parameter\">{0}</span>", parameter.Name);
                        writer.WriteLine("</dt>");

                        writer.WriteLine("<dd>");

                            var paramType = parameter.ParameterType;

                            writer.WriteLine("Type: {0}<br />", paramType.CreateReferenceHtml(fullTypeName: true));
                            
                            var doc = NDocUtilities.FindParameterDocumentation(ndoc, parameter.Name);
                            writer.WriteLine("<p>{0}</p>", doc);

                        writer.WriteLine("</dd>");

                    writer.WriteLine("</dl>");
                }

            writer.WriteLine("</div>");
        }
    }
}