/*
 * 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 {
  Paths1Jpgih6V01UsersUserIdDevicesRegisterPostRequestbodyContentApplicationJsonSchema,
  DevicesRegisterUserForDeviceOptionalParams,
  DevicesRegisterUserForDeviceResponse,
  DevicesDeviceDetailsOptionalParams,
  DevicesDeviceDetailsResponse,
  DevicesRemoveUserDeviceOptionalParams,
  DevicesRemoveUserDeviceResponse,
  DevicesUserDevicesListOptionalParams,
  DevicesUserDevicesListResponse,
  DevicesGetReleaseUpdateDevicesStatusOptionalParams,
  DevicesGetReleaseUpdateDevicesStatusResponse,
  DevicesListCsvFormatOptionalParams,
  DevicesListCsvFormatResponse,
  DevicesListOptionalParams,
  DevicesListResponse,
  DevicesBlockLogsOptionalParams,
  DevicesBlockLogsResponse
} from "../models";

/** Interface representing a Devices. */
export interface Devices {
  /**
   * Registers a user for an existing device
   * @param userId The ID of the user
   * @param body The device info.
   * @param options The options parameters.
   */
  registerUserForDevice(
    userId: string,
    body: Paths1Jpgih6V01UsersUserIdDevicesRegisterPostRequestbodyContentApplicationJsonSchema,
    options?: DevicesRegisterUserForDeviceOptionalParams
  ): Promise<DevicesRegisterUserForDeviceResponse>;
  /**
   * Returns the device details.
   * @param deviceUdid The UDID of the device
   * @param options The options parameters.
   */
  deviceDetails(
    deviceUdid: string,
    options?: DevicesDeviceDetailsOptionalParams
  ): Promise<DevicesDeviceDetailsResponse>;
  /**
   * Removes an existing device from a user
   * @param deviceUdid The UDID of the device
   * @param options The options parameters.
   */
  removeUserDevice(
    deviceUdid: string,
    options?: DevicesRemoveUserDeviceOptionalParams
  ): Promise<DevicesRemoveUserDeviceResponse>;
  /**
   * Returns all devices associated with the given user.
   * @param options The options parameters.
   */
  userDevicesList(
    options?: DevicesUserDevicesListOptionalParams
  ): Promise<DevicesUserDevicesListResponse>;
  /**
   * Returns the resign status to the caller
   * @param releaseId The ID of the release.
   * @param resignId The ID of the resign operation.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  getReleaseUpdateDevicesStatus(
    releaseId: string,
    resignId: string,
    ownerName: string,
    appName: string,
    options?: DevicesGetReleaseUpdateDevicesStatusOptionalParams
  ): Promise<DevicesGetReleaseUpdateDevicesStatusResponse>;
  /**
   * Returns all devices associated with the given distribution group.
   * @param distributionGroupName The name of the distribution group.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  listCsvFormat(
    distributionGroupName: string,
    ownerName: string,
    appName: string,
    options?: DevicesListCsvFormatOptionalParams
  ): Promise<DevicesListCsvFormatResponse>;
  /**
   * Returns all devices associated with the given distribution group
   * @param distributionGroupName The name of the distribution group.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  list(
    distributionGroupName: string,
    ownerName: string,
    appName: string,
    options?: DevicesListOptionalParams
  ): Promise<DevicesListResponse>;
  /**
   * **Warning, this operation is not reversible.**
   *
   *  A successful call to this API will permanently stop ingesting any logs received via SDK for the
   * given installation ID, and cannot be restored. We advise caution when using this API, it is designed
   * to permanently disable collection from a specific installation of the app on a device, usually
   * following the request from a user.
   *
   * @param installId The id of the device
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  blockLogs(
    installId: string,
    ownerName: string,
    appName: string,
    options?: DevicesBlockLogsOptionalParams
  ): Promise<DevicesBlockLogsResponse>;
}
