/*
 * Copyright 2014 Apereo Foundation (AF) Licensed under the
 * Educational Community License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may
 * obtain a copy of the License at
 *
 *     http://opensource.org/licenses/ECL-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an "AS IS"
 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

/**
 * Create a swagger query parameter
 *
 * @param  {String}     name                The parameter name
 * @param  {String}     description         The parameter description
 * @param  {String}     dataType            The parameter dataType
 * @param  {Boolean}    [required]          Whether this parameter is required
 * @param  {Boolean}    [allowMultiple]     Whether this parameter can be passed multiple times
 * @param  {Object}     [allowableValues]   The values that this parameter can be set to, looks like: `{'valueType': 'LIST', 'values': ['foo', 'bar']}`
 * @param  {String}     [defaultValue]      The value this parameter will take if no value is passed
 * @return {QueryParameter}                 A swagger QueryParameter
 */
var query = module.exports.query = function(name, description, dataType, required, allowMultiple, allowableValues, defaultValue) {
    return {
        'paramType': 'query',
        'name': name,
        'description': description,
        'dataType': dataType,
        'required': required,
        'allowMultiple': allowMultiple,
        'allowableValues': allowableValues,
        'defaultValue': defaultValue
    };
};

/**
 * Create a swagger path parameter
 *
 * @param  {String}     name                The parameter name
 * @param  {String}     description         The parameter description
 * @param  {String}     dataType            The parameter dataType
 * @param  {Object}     [allowableValues]   The values that this parameter can be set to, looks like: `{'valueType': 'LIST', 'values': ['foo', 'bar']}`
 * @param  {String}     [defaultValue]      The value this parameter will take if no value is passed
 * @return {PathParameter}                  A swagger PathParameter
 */
var path = module.exports.path = function(name, description, dataType, allowableValues, defaultValue) {
    return {
        'paramType': 'path',
        'name': name,
        'description': description,
        'dataType': dataType,
        'required': true,
        'allowMultiple': false,
        'allowableValues': allowableValues,
        'defaultValue': defaultValue
    };
};

/**
 * Create a swagger body parameter
 *
 * @param  {String}     name                The parameter name
 * @param  {String}     description         The parameter description
 * @param  {String}     dataType            The parameter dataType
 * @param  {String}     [defaultValue]      The value this parameter will take if no value is passed
 * @return {BodyParameter}                  A swagger BodyParameter
 */
var body = module.exports.body = function(name, description, dataType, defaultValue) {
    return {
        'paramType': 'body',
        'name': name,
        'description': description,
        'dataType': dataType,
        'required': true,
        'allowMultiple': false,
        'defaultValue': defaultValue
    };
};

/**
 * Create a swagger form parameter
 *
 * @param  {String}     name                The parameter name
 * @param  {String}     description         The parameter description
 * @param  {String}     dataType            The parameter dataType
 * @param  {Boolean}    [required]          Whether this parameter is required
 * @param  {String}     [defaultValue]      The value this parameter will take if no value is passed
 * @return {FormParameter}                  A swagger FormParameter
 */
var form = module.exports.form = function(name, description, dataType, required, defaultValue) {
    return {
        'paramType': 'form',
        'name': name,
        'description': description,
        'dataType': 'string',
        'required': required,
        'allowMultiple': false,
        'defaultValue': defaultValue
    };
};

/**
 * Create a swagger header parameter
 *
 * @param  {String}     name                The parameter name
 * @param  {String}     description         The parameter description
 * @param  {String}     dataType            The parameter dataType
 * @param  {Boolean}    [required]          Whether this parameter is required
 * @return {HeaderParameter}                A swagger HeaderParameter
 */
var header = module.exports.header = function(name, description, dataType, required) {
    return {
        'paramType': 'header',
        'name': name,
        'description': description,
        'dataType': dataType,
        'required': required,
        'allowMultiple': false
    };
};

@@ -730,32 +730,33 @@
 m  %7BString%7D     
+%5B
 description     
@@ -742,34 +742,33 @@
     %5Bdescription
-  
+%5D
        The param
@@ -921,32 +921,50 @@
 eter is required
+ defaults to false
 %0A * @param  %7BBoo
@@ -1043,16 +1043,34 @@
 le times
+ defaults to false
 %0A * @par
@@ -1610,32 +1610,38 @@
 on': description
+ %7C%7C ''
 ,%0A        'dataT
@@ -1676,32 +1676,56 @@
 uired': required
+ === true ? true : false
 ,%0A        'allow
@@ -1748,16 +1748,40 @@
 Multiple
+ === true ? true : false
 ,%0A      
@@ -1987,32 +1987,33 @@
 m  %7BString%7D     
+%5B
 description     
@@ -1999,34 +1999,33 @@
     %5Bdescription
-  
+%5D
        The param
@@ -2627,32 +2627,38 @@
 on': description
+ %7C%7C ''
 ,%0A        'dataT
@@ -2944,32 +2944,33 @@
 m  %7BString%7D     
+%5B
 description     
@@ -2956,34 +2956,33 @@
     %5Bdescription
-  
+%5D
        The param
@@ -3415,32 +3415,38 @@
 on': description
+ %7C%7C ''
 ,%0A        'dataT
@@ -3688,32 +3688,33 @@
 m  %7BString%7D     
+%5B
 description     
@@ -3700,34 +3700,33 @@
     %5Bdescription
-  
+%5D
        The param
@@ -3883,24 +3883,42 @@
  is required
+ defaults to false
 %0A * @param  
@@ -4266,32 +4266,38 @@
 on': description
+ %7C%7C ''
 ,%0A        'dataT
@@ -4332,32 +4332,56 @@
 uired': required
+ === true ? true : false
 ,%0A        'allow
@@ -4577,16 +4577,17 @@
 ng%7D     
+%5B
 descript
@@ -4589,18 +4589,17 @@
 cription
-  
+%5D
        T
@@ -4768,16 +4768,34 @@
 required
+ defaults to false
 %0A * @ret
@@ -5048,16 +5048,22 @@
 cription
+ %7C%7C ''
 ,%0A      
@@ -5114,16 +5114,40 @@
 required
+ === true ? true : false
 ,%0A      

set defaults and improve doc