/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 * 
 * Code generated by Microsoft (R) AutoRest Code Generator 0.16.0.0
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
*/

import { ServiceClientOptions, RequestOptions, ServiceCallback } from 'ms-rest';
import * as models from '../models';


/**
 * @class
 * PolicyAssignments
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the PolicyClient.
 */
export interface PolicyAssignments {

    /**
     * Delete policy assignment.
     *
     * @param {string} scope Scope of the policy assignment.
     * 
     * @param {string} policyAssignmentName Policy assignment name.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    deleteMethod(scope: string, policyAssignmentName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignment>): void;
    deleteMethod(scope: string, policyAssignmentName: string, callback: ServiceCallback<models.PolicyAssignment>): void;

    /**
     * Create policy assignment.
     *
     * @param {string} scope Scope of the policy assignment.
     * 
     * @param {string} policyAssignmentName Policy assignment name.
     * 
     * @param {object} parameters Policy assignment.
     * 
     * @param {string} [parameters.displayName] Gets or sets the policy assignment
     * display name.
     * 
     * @param {string} [parameters.policyDefinitionId] Gets or sets the policy
     * definition Id.
     * 
     * @param {string} [parameters.scope] Gets or sets the scope at which the
     * policy assignment exists.
     * 
     * @param {string} [parameters.id] Gets or sets the Id of the policy
     * assignment.
     * 
     * @param {string} [parameters.type] Gets or sets the type of the policy
     * assignment.
     * 
     * @param {string} [parameters.name] Gets or sets the name of the policy
     * assignment.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    create(scope: string, policyAssignmentName: string, parameters: models.PolicyAssignment, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignment>): void;
    create(scope: string, policyAssignmentName: string, parameters: models.PolicyAssignment, callback: ServiceCallback<models.PolicyAssignment>): void;

    /**
     * Get single policy assignment.
     *
     * @param {string} scope Scope of the policy assignment.
     * 
     * @param {string} policyAssignmentName Policy assignment name.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    get(scope: string, policyAssignmentName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignment>): void;
    get(scope: string, policyAssignmentName: string, callback: ServiceCallback<models.PolicyAssignment>): void;

    /**
     * Gets policy assignments of the resource group.
     *
     * @param {string} resourceGroupName Resource group name.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {string} [options.filter] The filter to apply on the operation.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    listForResourceGroup(resourceGroupName: string, options: { filter? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;
    listForResourceGroup(resourceGroupName: string, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;

    /**
     * Gets policy assignments of the resource.
     *
     * @param {string} resourceGroupName The name of the resource group. The name
     * is case insensitive.
     * 
     * @param {string} resourceProviderNamespace The resource provider namespace.
     * 
     * @param {string} parentResourcePath The parent resource path.
     * 
     * @param {string} resourceType The resource type.
     * 
     * @param {string} resourceName The resource name.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {string} [options.filter] The filter to apply on the operation.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    listForResource(resourceGroupName: string, resourceProviderNamespace: string, parentResourcePath: string, resourceType: string, resourceName: string, options: { filter? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;
    listForResource(resourceGroupName: string, resourceProviderNamespace: string, parentResourcePath: string, resourceType: string, resourceName: string, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;

    /**
     * Gets all the policy assignments of a subscription.
     *
     * @param {object} [options] Optional Parameters.
     * 
     * @param {string} [options.filter] The filter to apply on the operation.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    list(options: { filter? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;
    list(callback: ServiceCallback<models.PolicyAssignmentListResult>): void;

    /**
     * Delete policy assignment.
     *
     * @param {string} policyAssignmentId Policy assignment Id
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    deleteById(policyAssignmentId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignment>): void;
    deleteById(policyAssignmentId: string, callback: ServiceCallback<models.PolicyAssignment>): void;

    /**
     * Create policy assignment by Id.
     *
     * @param {string} policyAssignmentId Policy assignment Id
     * 
     * @param {object} parameters Policy assignment.
     * 
     * @param {string} [parameters.displayName] Gets or sets the policy assignment
     * display name.
     * 
     * @param {string} [parameters.policyDefinitionId] Gets or sets the policy
     * definition Id.
     * 
     * @param {string} [parameters.scope] Gets or sets the scope at which the
     * policy assignment exists.
     * 
     * @param {string} [parameters.id] Gets or sets the Id of the policy
     * assignment.
     * 
     * @param {string} [parameters.type] Gets or sets the type of the policy
     * assignment.
     * 
     * @param {string} [parameters.name] Gets or sets the name of the policy
     * assignment.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    createById(policyAssignmentId: string, parameters: models.PolicyAssignment, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignment>): void;
    createById(policyAssignmentId: string, parameters: models.PolicyAssignment, callback: ServiceCallback<models.PolicyAssignment>): void;

    /**
     * Get single policy assignment.
     *
     * @param {string} policyAssignmentId Policy assignment Id
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    getById(policyAssignmentId: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignment>): void;
    getById(policyAssignmentId: string, callback: ServiceCallback<models.PolicyAssignment>): void;

    /**
     * Gets policy assignments of the resource group.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    listForResourceGroupNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;
    listForResourceGroupNext(nextPageLink: string, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;

    /**
     * Gets policy assignments of the resource.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    listForResourceNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;
    listForResourceNext(nextPageLink: string, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;

    /**
     * Gets all the policy assignments of a subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;
    listNext(nextPageLink: string, callback: ServiceCallback<models.PolicyAssignmentListResult>): void;
}

/**
 * @class
 * PolicyDefinitions
 * __NOTE__: An instance of this class is automatically created for an
 * instance of the PolicyClient.
 */
export interface PolicyDefinitions {

    /**
     * Create or update a policy definition.
     *
     * @param {string} policyDefinitionName The policy definition name.
     * 
     * @param {object} parameters The policy definition properties.
     * 
     * @param {string} [parameters.policyType] Gets or sets policy definition
     * policy type. Possible values include: 'NotSpecified', 'BuiltIn', 'Custom'
     * 
     * @param {string} [parameters.displayName] Gets or sets the policy definition
     * display name.
     * 
     * @param {string} [parameters.description] Gets or sets the policy definition
     * description.
     * 
     * @param {object} [parameters.policyRule] Gets or sets the policy rule.
     * 
     * @param {string} [parameters.id] Gets or sets the Id of the policy
     * definition.
     * 
     * @param {string} [parameters.name] Gets or sets the name of the policy
     * definition.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    createOrUpdate(policyDefinitionName: string, parameters: models.PolicyDefinition, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyDefinition>): void;
    createOrUpdate(policyDefinitionName: string, parameters: models.PolicyDefinition, callback: ServiceCallback<models.PolicyDefinition>): void;

    /**
     * Deletes the policy definition.
     *
     * @param {string} policyDefinitionName The policy definition name.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    deleteMethod(policyDefinitionName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<void>): void;
    deleteMethod(policyDefinitionName: string, callback: ServiceCallback<void>): void;

    /**
     * Gets the policy definition.
     *
     * @param {string} policyDefinitionName The policy definition name.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    get(policyDefinitionName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyDefinition>): void;
    get(policyDefinitionName: string, callback: ServiceCallback<models.PolicyDefinition>): void;

    /**
     * Gets all the policy definitions of a subscription.
     *
     * @param {object} [options] Optional Parameters.
     * 
     * @param {string} [options.filter] The filter to apply on the operation.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    list(options: { filter? : string, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyDefinitionListResult>): void;
    list(callback: ServiceCallback<models.PolicyDefinitionListResult>): void;

    /**
     * Gets all the policy definitions of a subscription.
     *
     * @param {string} nextPageLink The NextLink from the previous successful call
     * to List operation.
     * 
     * @param {object} [options] Optional Parameters.
     * 
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     * 
     * @param {ServiceCallback} [callback] callback function; see ServiceCallback
     * doc in ms-rest index.d.ts for details
     */
    listNext(nextPageLink: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.PolicyDefinitionListResult>): void;
    listNext(nextPageLink: string, callback: ServiceCallback<models.PolicyDefinitionListResult>): void;
}
