/*
 * Copyright (c) Microsoft Corporation.
 * Licensed under the MIT License.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is regenerated.
 */

import {
  PushConfigExistsOptionalParams,
  PushGetConfigOptionalParams,
  PushGetConfigResponse,
  Paths1Nw7A47V01AppsOwnerNameAppNamePushNotificationsConfigPutRequestbodyContentApplicationJsonSchema,
  PushSetConfigOptionalParams,
  PushSetConfigResponse,
  PushDeleteConfigOptionalParams,
  PushGetOptionalParams,
  PushGetResponse,
  PushListOptionalParams,
  PushListResponse,
  PostContentSchemaNotificationContent,
  PushSendOptionalParams,
  PushSendResponse,
  PushDeleteOptionalParams,
  PushDeleteInstallIdOptionalParams,
  PushExportDevicesStatusOptionalParams,
  PushExportDevicesStatusResponse,
  PushExportDevicesOptionalParams,
  PushExportDevicesResponse
} from "../models";

/** Interface representing a Push. */
export interface Push {
  /**
   * Returns whether a push configuration exists for the selected app.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  configExists(
    ownerName: string,
    appName: string,
    options?: PushConfigExistsOptionalParams
  ): Promise<void>;
  /**
   * Get the push configuration for the selected app.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  getConfig(
    ownerName: string,
    appName: string,
    options?: PushGetConfigOptionalParams
  ): Promise<PushGetConfigResponse>;
  /**
   * Set the push configuration for the selected app.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param properties Notification configurations.
   * @param options The options parameters.
   */
  setConfig(
    ownerName: string,
    appName: string,
    properties: Paths1Nw7A47V01AppsOwnerNameAppNamePushNotificationsConfigPutRequestbodyContentApplicationJsonSchema,
    options?: PushSetConfigOptionalParams
  ): Promise<PushSetConfigResponse>;
  /**
   * Delete the push configuration for the selected app.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  deleteConfig(
    ownerName: string,
    appName: string,
    options?: PushDeleteConfigOptionalParams
  ): Promise<void>;
  /**
   * Get details about a specific notification.
   * @param notificationId The id of the notification.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  get(
    notificationId: string,
    ownerName: string,
    appName: string,
    options?: PushGetOptionalParams
  ): Promise<PushGetResponse>;
  /**
   * Get a list of notifications from the service.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  list(
    ownerName: string,
    appName: string,
    options?: PushListOptionalParams
  ): Promise<PushListResponse>;
  /**
   * Send a notification to one or more devices.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param notificationContent Notification definition object
   * @param options The options parameters.
   */
  send(
    ownerName: string,
    appName: string,
    notificationContent: PostContentSchemaNotificationContent,
    options?: PushSendOptionalParams
  ): Promise<PushSendResponse>;
  /**
   * Delete a notification.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param values List of notification Ids.
   * @param options The options parameters.
   */
  delete(
    ownerName: string,
    appName: string,
    values: string[],
    options?: PushDeleteOptionalParams
  ): Promise<void>;
  /**
   * Delete a device with the selected installId.
   * @param installId device install id
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  deleteInstallId(
    installId: string,
    ownerName: string,
    appName: string,
    options?: PushDeleteInstallIdOptionalParams
  ): Promise<void>;
  /**
   * Get the status of an export operation.
   * @param exportId The id of the export.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  exportDevicesStatus(
    exportId: string,
    ownerName: string,
    appName: string,
    options?: PushExportDevicesStatusOptionalParams
  ): Promise<PushExportDevicesStatusResponse>;
  /**
   * Exports information for all devices using Push to Azure Blob Storage
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param blobContainerSasUri A shared access signature (SAS) URI with Read, Write and Delete
   *                            permissions on a container.
   * @param options The options parameters.
   */
  exportDevices(
    ownerName: string,
    appName: string,
    blobContainerSasUri: string,
    options?: PushExportDevicesOptionalParams
  ): Promise<PushExportDevicesResponse>;
}
