using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Net.Http.Headers;
using System.Web.Http.Description;
using WebAPI.Areas.HelpPage.ModelDescriptions;
namespace WebAPI.Areas.HelpPage.Models
{
    /// 
    /// The model that represents an API displayed on the help page.
    /// 
    public class HelpPageApiModel
    {
        /// 
        /// Initializes a new instance of the  class.
        /// 
        public HelpPageApiModel()
        {
            UriParameters = new Collection();
            SampleRequests = new Dictionary();
            SampleResponses = new Dictionary();
            ErrorMessages = new Collection();
        }
        /// 
        /// Gets or sets the  that describes the API.
        /// 
        public ApiDescription ApiDescription { get; set; }
        /// 
        /// Gets or sets the  collection that describes the URI parameters for the API.
        /// 
        public Collection UriParameters { get; private set; }
        /// 
        /// Gets or sets the documentation for the request.
        /// 
        public string RequestDocumentation { get; set; }
        /// 
        /// Gets or sets the  that describes the request body.
        /// 
        public ModelDescription RequestModelDescription { get; set; }
        /// 
        /// Gets the request body parameter descriptions.
        /// 
        public IList RequestBodyParameters
        {
            get
            {
                return GetParameterDescriptions(RequestModelDescription);
            }
        }
        /// 
        /// Gets or sets the  that describes the resource.
        /// 
        public ModelDescription ResourceDescription { get; set; }
        /// 
        /// Gets the resource property descriptions.
        /// 
        public IList ResourceProperties
        {
            get
            {
                return GetParameterDescriptions(ResourceDescription);
            }
        }
        /// 
        /// Gets the sample requests associated with the API.
        /// 
        public IDictionary SampleRequests { get; private set; }
        /// 
        /// Gets the sample responses associated with the API.
        /// 
        public IDictionary SampleResponses { get; private set; }
        /// 
        /// Gets the error messages associated with this model.
        /// 
        public Collection ErrorMessages { get; private set; }
        private static IList GetParameterDescriptions(ModelDescription modelDescription)
        {
            ComplexTypeModelDescription complexTypeModelDescription = modelDescription as ComplexTypeModelDescription;
            if (complexTypeModelDescription != null)
            {
                return complexTypeModelDescription.Properties;
            }
            CollectionModelDescription collectionModelDescription = modelDescription as CollectionModelDescription;
            if (collectionModelDescription != null)
            {
                complexTypeModelDescription = collectionModelDescription.ElementDescription as ComplexTypeModelDescription;
                if (complexTypeModelDescription != null)
                {
                    return complexTypeModelDescription.Properties;
                }
            }
            return null;
        }
    }
}