/*
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
*/

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


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


    /**
     * Get list of notifications
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.inlinecount] Controls whether or not to include a
     * count of all the items accross all pages. Possible values include:
     * 'allpages', 'none'
     *
     * @param {string} [options.orderby] controls the sorting order and sorting
     * based on which column
     *
     * @param {string} [options.skiptoken] The value identifies a starting point in
     * the collection of entities. This parameter along with limit is used to
     * perform pagination.
     *
     * @param {number} [options.top] The maximum number of results to return. (0
     * will fetch all results)
     *
     * @param {boolean} [options.includeArchived] Include arhived push
     * notifications
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<NotificationsListResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    listWithHttpOperationResponse(appName: string, ownerName: string, options?: { inlinecount? : string, orderby? : string, skiptoken? : string, top? : number, includeArchived? : boolean, customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.NotificationsListResult>>;

    /**
     * Get list of notifications
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {string} [options.inlinecount] Controls whether or not to include a
     * count of all the items accross all pages. Possible values include:
     * 'allpages', 'none'
     *
     * @param {string} [options.orderby] controls the sorting order and sorting
     * based on which column
     *
     * @param {string} [options.skiptoken] The value identifies a starting point in
     * the collection of entities. This parameter along with limit is used to
     * perform pagination.
     *
     * @param {number} [options.top] The maximum number of results to return. (0
     * will fetch all results)
     *
     * @param {boolean} [options.includeArchived] Include arhived push
     * notifications
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {NotificationsListResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {NotificationsListResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link NotificationsListResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    list(appName: string, ownerName: string, options?: { inlinecount? : string, orderby? : string, skiptoken? : string, top? : number, includeArchived? : boolean, customHeaders? : { [headerName: string]: string; } }): Promise<models.NotificationsListResult>;
    list(appName: string, ownerName: string, callback: ServiceCallback<models.NotificationsListResult>): void;
    list(appName: string, ownerName: string, options: { inlinecount? : string, orderby? : string, skiptoken? : string, top? : number, includeArchived? : boolean, customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.NotificationsListResult>): void;


    /**
     * Send notification.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} properties Notification specifications.
     *
     * @param {object} [properties.notificationTarget]
     *
     * @param {string} properties.notificationTarget.type Polymorphic Discriminator
     *
     * @param {object} properties.notificationContent
     *
     * @param {string} properties.notificationContent.name Notification name
     *
     * @param {string} [properties.notificationContent.title] Notification title
     *
     * @param {string} properties.notificationContent.body Notification body
     *
     * @param {object} [properties.notificationContent.customData] Notification
     * custom data(priority, expiration, etc.)
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<null>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    sendWithHttpOperationResponse(appName: string, ownerName: string, properties: models.NotificationDefinition, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<void>>;

    /**
     * Send notification.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} properties Notification specifications.
     *
     * @param {object} [properties.notificationTarget]
     *
     * @param {string} properties.notificationTarget.type Polymorphic Discriminator
     *
     * @param {object} properties.notificationContent
     *
     * @param {string} properties.notificationContent.name Notification name
     *
     * @param {string} [properties.notificationContent.title] Notification title
     *
     * @param {string} properties.notificationContent.body Notification body
     *
     * @param {object} [properties.notificationContent.customData] Notification
     * custom data(priority, expiration, etc.)
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {null} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {null} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    send(appName: string, ownerName: string, properties: models.NotificationDefinition, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<void>;
    send(appName: string, ownerName: string, properties: models.NotificationDefinition, callback: ServiceCallback<void>): void;
    send(appName: string, ownerName: string, properties: models.NotificationDefinition, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<void>): void;


    /**
     * Archive push campaign(s)
     *
     * @param {string} appName The name of the application
     *
     * @param {object} notificationIds List of notification ids
     *
     * @param {array} notificationIds.values List of notification Ids.
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<null>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    notificationArchiveWithHttpOperationResponse(appName: string, notificationIds: models.NotificationIdList, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<void>>;

    /**
     * Archive push campaign(s)
     *
     * @param {string} appName The name of the application
     *
     * @param {object} notificationIds List of notification ids
     *
     * @param {array} notificationIds.values List of notification Ids.
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {null} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {null} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    notificationArchive(appName: string, notificationIds: models.NotificationIdList, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<void>;
    notificationArchive(appName: string, notificationIds: models.NotificationIdList, ownerName: string, callback: ServiceCallback<void>): void;
    notificationArchive(appName: string, notificationIds: models.NotificationIdList, ownerName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<void>): void;


    /**
     * Get notification details.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} notificationId The id of the notification.
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<NotificationDetailsResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getWithHttpOperationResponse(appName: string, notificationId: string, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.NotificationDetailsResult>>;

    /**
     * Get notification details.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} notificationId The id of the notification.
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {NotificationDetailsResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {NotificationDetailsResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link NotificationDetailsResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    get(appName: string, notificationId: string, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.NotificationDetailsResult>;
    get(appName: string, notificationId: string, ownerName: string, callback: ServiceCallback<models.NotificationDetailsResult>): void;
    get(appName: string, notificationId: string, ownerName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.NotificationDetailsResult>): void;


    /**
     * Returns whether push config exists.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<null>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    configExistsWithHttpOperationResponse(appName: string, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<void>>;

    /**
     * Returns whether push config exists.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {null} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {null} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    configExists(appName: string, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<void>;
    configExists(appName: string, ownerName: string, callback: ServiceCallback<void>): void;
    configExists(appName: string, ownerName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<void>): void;


    /**
     * Get configuration.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<NotificationConfigResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    getConfigWithHttpOperationResponse(appName: string, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.NotificationConfigResult>>;

    /**
     * Get configuration.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {NotificationConfigResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {NotificationConfigResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link NotificationConfigResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    getConfig(appName: string, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.NotificationConfigResult>;
    getConfig(appName: string, ownerName: string, callback: ServiceCallback<models.NotificationConfigResult>): void;
    getConfig(appName: string, ownerName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.NotificationConfigResult>): void;


    /**
     * Set notification configuration.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} properties Notification configurations.
     *
     * @param {string} properties.type Polymorphic Discriminator
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<NotificationConfigResult>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    setConfigWithHttpOperationResponse(appName: string, ownerName: string, properties: models.NotificationConfig, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<models.NotificationConfigResult>>;

    /**
     * Set notification configuration.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} properties Notification configurations.
     *
     * @param {string} properties.type Polymorphic Discriminator
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {NotificationConfigResult} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {NotificationConfigResult} [result]   - The deserialized result object if an error did not occur.
     *                      See {@link NotificationConfigResult} for more
     *                      information.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    setConfig(appName: string, ownerName: string, properties: models.NotificationConfig, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<models.NotificationConfigResult>;
    setConfig(appName: string, ownerName: string, properties: models.NotificationConfig, callback: ServiceCallback<models.NotificationConfigResult>): void;
    setConfig(appName: string, ownerName: string, properties: models.NotificationConfig, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<models.NotificationConfigResult>): void;


    /**
     * Delete notification configuration.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @returns {Promise} A promise is returned
     *
     * @resolve {HttpOperationResponse<null>} - The deserialized result object.
     *
     * @reject {Error|ServiceError} - The error object.
     */
    deleteConfigWithHttpOperationResponse(appName: string, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<HttpOperationResponse<void>>;

    /**
     * Delete notification configuration.
     *
     * @param {string} appName The name of the application
     *
     * @param {string} ownerName The name of the owner
     *
     * @param {object} [options] Optional Parameters.
     *
     * @param {object} [options.customHeaders] Headers that will be added to the
     * request
     *
     * @param {ServiceCallback} [optionalCallback] - The optional callback.
     *
     * @returns {ServiceCallback|Promise} If a callback was passed as the last
     * parameter then it returns the callback else returns a Promise.
     *
     * {Promise} A promise is returned.
     *
     *                      @resolve {null} - The deserialized result object.
     *
     *                      @reject {Error|ServiceError} - The error object.
     *
     * {ServiceCallback} optionalCallback(err, result, request, response)
     *
     *                      {Error|ServiceError}  err        - The Error object if an error occurred, null otherwise.
     *
     *                      {null} [result]   - The deserialized result object if an error did not occur.
     *
     *                      {WebResource} [request]  - The HTTP Request object if an error did not occur.
     *
     *                      {http.IncomingMessage} [response] - The HTTP Response stream if an error did not occur.
     */
    deleteConfig(appName: string, ownerName: string, options?: { customHeaders? : { [headerName: string]: string; } }): Promise<void>;
    deleteConfig(appName: string, ownerName: string, callback: ServiceCallback<void>): void;
    deleteConfig(appName: string, ownerName: string, options: { customHeaders? : { [headerName: string]: string; } }, callback: ServiceCallback<void>): void;
}
