<%- project.commentHeader %>

namespace <%- project.namespace %>
{
    using Microsoft.Rest;
<% project.model.usings.forEach(function(using){ -%>
    using <%- using %>;
<% }); -%>

    /// <summary>
    /// <%=project.helper.wrapComments('        ', '/// ', project.model.info.description)%>
    /// </summary>
<% var client = project.model.info.title -%>
    public partial interface I<%- client %> :  System.IDisposable
    {
        /// <summary>
        /// The base URI of the service.
        /// </summary>
        System.Uri BaseUri { get; set; }

        /// <summary>
        /// Gets or sets json serialization settings.
        /// </summary>
        Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; }

        /// <summary>
        /// Gets or sets json deserialization settings.
        /// </summary>
        Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; }

<% (project.model.globalParameters || []).filter(p => p.language.default.name != '$host').forEach(function(parameter){ -%>
        /// <summary>
        /// <%=project.helper.wrapComments('        ', '/// ', parameter.language.default.description)%>
        /// </summary>
<%# ToDo: need to use fullname instead of namespace + name -%>
<% var type = parameter.schema.type == 'constant' ? parameter.schema.valueType.language.csharp.fullname : parameter.schema.language.csharp.fullname-%>
<%type = type.includes('.') || type == 'string' ? type : type + '?'-%>
<% if (parameter.readOnly || parameter.schema.type == 'constant') {-%>
        <%- type %> <%- parameter.language.default.name%> { get;}
<% } else {-%>
        <%- type %> <%- parameter.language.default.name%> { get; set;}
<% }%>

<% }); -%>
<% project.model.operationGroups.filter(methodGroup => methodGroup.$key != '').forEach(function(methodGroup){ -%>
<% var key = project.helper.ConvertToValidMethodGroupKey(methodGroup.$key)-%>
        /// <summary>
        /// Gets the I<%- project.helper.PascalCase(key) %>Operations
        /// </summary>
        I<%- project.helper.PascalCase(key) %>Operations <%- project.helper.PascalCase(methodGroup.$key) %> { get; }

<% }); -%>
<%# ToDo: Add method whose group is empty, and need to check in which case the group is empty.-%>
<% var methodGroupWithoutKey = (project.state.model.operationGroups || []).filter(op => op.$key == '')
if (methodGroupWithoutKey.length > 0) {
    var methodGroup = methodGroupWithoutKey[0]
-%>
<%- include('methodGroupInterfaceBody', {methodGroup: methodGroup}) -%>
<% } -%>
    }
}