/*
 * 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 { Analytics } from "../operationsInterfaces";
import * as coreClient from "@azure/core-client";
import * as Mappers from "../models/mappers";
import * as Parameters from "../models/parameters";
import { AppCenterClient } from "../appCenterClient";
import {
  AnalyticsVersionsOptionalParams,
  AnalyticsVersionsResponse,
  AnalyticsPerDeviceCountsOptionalParams,
  AnalyticsPerDeviceCountsResponse,
  AnalyticsSessionDurationsDistributionOptionalParams,
  AnalyticsSessionDurationsDistributionResponse,
  AnalyticsSessionCountsOptionalParams,
  AnalyticsSessionCountsResponse,
  AnalyticsPlaceCountsOptionalParams,
  AnalyticsPlaceCountsResponse,
  AnalyticsOperatingSystemCountsOptionalParams,
  AnalyticsOperatingSystemCountsResponse,
  AnalyticsModelCountsOptionalParams,
  AnalyticsModelCountsResponse,
  AnalyticsLogFlowOptionalParams,
  AnalyticsLogFlowResponse,
  AnalyticsLanguageCountsOptionalParams,
  AnalyticsLanguageCountsResponse,
  AnalyticsGenericLogFlowOptionalParams,
  AnalyticsGenericLogFlowResponse,
  AnalyticsEventPropertyCountsOptionalParams,
  AnalyticsEventPropertyCountsResponse,
  AnalyticsEventPropertiesOptionalParams,
  AnalyticsEventPropertiesResponse,
  AnalyticsEventCountOptionalParams,
  AnalyticsEventCountResponse,
  AnalyticsEventDeviceCountOptionalParams,
  AnalyticsEventDeviceCountResponse,
  AnalyticsEventPerSessionCountOptionalParams,
  AnalyticsEventPerSessionCountResponse,
  AnalyticsEventPerDeviceCountOptionalParams,
  AnalyticsEventPerDeviceCountResponse,
  AnalyticsEventsDeleteOptionalParams,
  AnalyticsEventsOptionalParams,
  AnalyticsEventsResponse,
  AnalyticsEventsDeleteLogsOptionalParams,
  PostContentSchemaReleasesItem,
  AnalyticsDistributionReleaseCountsOptionalParams,
  AnalyticsDistributionReleaseCountsResponse,
  AnalyticsCrashFreeDevicePercentagesOptionalParams,
  AnalyticsCrashFreeDevicePercentagesResponse,
  AnalyticsCrashGroupTotalsOptionalParams,
  AnalyticsCrashGroupTotalsResponse,
  AnalyticsCrashGroupOperatingSystemCountsOptionalParams,
  AnalyticsCrashGroupOperatingSystemCountsResponse,
  AnalyticsCrashGroupModelCountsOptionalParams,
  AnalyticsCrashGroupModelCountsResponse,
  AnalyticsCrashGroupCountsOptionalParams,
  AnalyticsCrashGroupCountsResponse,
  PostContentSchemaCrashGroupsItem,
  AnalyticsCrashGroupsTotalsOptionalParams,
  AnalyticsCrashGroupsTotalsResponse,
  AnalyticsCrashCountsOptionalParams,
  AnalyticsCrashCountsResponse,
  AnalyticsAudienceNameExistsOptionalParams,
  AnalyticsDeleteAudienceOptionalParams,
  AnalyticsGetAudienceOptionalParams,
  AnalyticsGetAudienceResponse,
  Paths2Mes8QV01AppsOwnerNameAppNameAnalyticsAudiencesAudienceNamePutRequestbodyContentApplicationJsonSchema,
  AnalyticsCreateOrUpdateAudienceOptionalParams,
  AnalyticsCreateOrUpdateAudienceResponse,
  AnalyticsListDevicePropertyValuesOptionalParams,
  AnalyticsListDevicePropertyValuesResponse,
  AnalyticsListDevicePropertiesOptionalParams,
  AnalyticsListDevicePropertiesResponse,
  AnalyticsListCustomPropertiesOptionalParams,
  AnalyticsListCustomPropertiesResponse,
  Paths16F7ScgV01AppsOwnerNameAppNameAnalyticsAudiencesDefinitionTestPostRequestbodyContentApplicationJsonSchema,
  AnalyticsTestAudienceOptionalParams,
  AnalyticsTestAudienceResponse,
  AnalyticsListAudiencesOptionalParams,
  AnalyticsListAudiencesResponse,
  AnalyticsDeviceCountsOptionalParams,
  AnalyticsDeviceCountsResponse
} from "../models";

/** Class containing Analytics operations. */
export class AnalyticsImpl implements Analytics {
  private readonly client: AppCenterClient;

  /**
   * Initialize a new instance of the class Analytics class.
   * @param client Reference to the service client
   */
  constructor(client: AppCenterClient) {
    this.client = client;
  }

  /**
   * Count of active versions in the time range ordered by version.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  versions(
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsVersionsOptionalParams
  ): Promise<AnalyticsVersionsResponse> {
    return this.client.sendOperationRequest(
      { start, ownerName, appName, options },
      versionsOperationSpec
    );
  }

  /**
   * Count of sessions per device in the time range.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param interval Size of interval in ISO 8601 duration format. (PnYnMnDTnHnMnS|PnW|P<date>T<time>).
   *                 The valid durations are 1 day (P1D), 1 week (P1W), and 30 days (P30D).
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  perDeviceCounts(
    start: Date,
    interval: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsPerDeviceCountsOptionalParams
  ): Promise<AnalyticsPerDeviceCountsResponse> {
    return this.client.sendOperationRequest(
      { start, interval, ownerName, appName, options },
      perDeviceCountsOperationSpec
    );
  }

  /**
   * Gets session duration.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  sessionDurationsDistribution(
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsSessionDurationsDistributionOptionalParams
  ): Promise<AnalyticsSessionDurationsDistributionResponse> {
    return this.client.sendOperationRequest(
      { start, ownerName, appName, options },
      sessionDurationsDistributionOperationSpec
    );
  }

  /**
   * Count of sessions in the time range.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param interval Size of interval in ISO 8601 duration format. (PnYnMnDTnHnMnS|PnW|P<date>T<time>).
   *                 The valid durations are 1 day (P1D), 1 week (P1W), and 30 days (P30D).
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  sessionCounts(
    start: Date,
    interval: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsSessionCountsOptionalParams
  ): Promise<AnalyticsSessionCountsResponse> {
    return this.client.sendOperationRequest(
      { start, interval, ownerName, appName, options },
      sessionCountsOperationSpec
    );
  }

  /**
   * Places in the time range.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  placeCounts(
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsPlaceCountsOptionalParams
  ): Promise<AnalyticsPlaceCountsResponse> {
    return this.client.sendOperationRequest(
      { start, ownerName, appName, options },
      placeCountsOperationSpec
    );
  }

  /**
   * OSes in the time range.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  operatingSystemCounts(
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsOperatingSystemCountsOptionalParams
  ): Promise<AnalyticsOperatingSystemCountsResponse> {
    return this.client.sendOperationRequest(
      { start, ownerName, appName, options },
      operatingSystemCountsOperationSpec
    );
  }

  /**
   * Models in the time range.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  modelCounts(
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsModelCountsOptionalParams
  ): Promise<AnalyticsModelCountsResponse> {
    return this.client.sendOperationRequest(
      { start, ownerName, appName, options },
      modelCountsOperationSpec
    );
  }

  /**
   * Logs received between the specified start time and the current time. The API will return a maximum
   * of 100 logs per call.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  logFlow(
    ownerName: string,
    appName: string,
    options?: AnalyticsLogFlowOptionalParams
  ): Promise<AnalyticsLogFlowResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, options },
      logFlowOperationSpec
    );
  }

  /**
   * Languages in the time range.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  languageCounts(
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsLanguageCountsOptionalParams
  ): Promise<AnalyticsLanguageCountsResponse> {
    return this.client.sendOperationRequest(
      { start, ownerName, appName, options },
      languageCountsOperationSpec
    );
  }

  /**
   * Logs received between the specified start time and the current time. The API will return a maximum
   * of 100 logs per call.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  genericLogFlow(
    ownerName: string,
    appName: string,
    options?: AnalyticsGenericLogFlowOptionalParams
  ): Promise<AnalyticsGenericLogFlowResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, options },
      genericLogFlowOperationSpec
    );
  }

  /**
   * Event properties value counts during the time range in descending order.
   * @param eventName The id of the event.
   * @param eventPropertyName The id of the event property.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  eventPropertyCounts(
    eventName: string,
    eventPropertyName: string,
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventPropertyCountsOptionalParams
  ): Promise<AnalyticsEventPropertyCountsResponse> {
    return this.client.sendOperationRequest(
      { eventName, eventPropertyName, start, ownerName, appName, options },
      eventPropertyCountsOperationSpec
    );
  }

  /**
   * Event properties.
   * @param eventName The id of the event.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  eventProperties(
    eventName: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventPropertiesOptionalParams
  ): Promise<AnalyticsEventPropertiesResponse> {
    return this.client.sendOperationRequest(
      { eventName, ownerName, appName, options },
      eventPropertiesOperationSpec
    );
  }

  /**
   * Count of events by interval in the time range.
   * @param eventName The id of the event.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  eventCount(
    eventName: string,
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventCountOptionalParams
  ): Promise<AnalyticsEventCountResponse> {
    return this.client.sendOperationRequest(
      { eventName, start, ownerName, appName, options },
      eventCountOperationSpec
    );
  }

  /**
   * Count of devices for an event by interval in the time range.
   * @param eventName The id of the event.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  eventDeviceCount(
    eventName: string,
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventDeviceCountOptionalParams
  ): Promise<AnalyticsEventDeviceCountResponse> {
    return this.client.sendOperationRequest(
      { eventName, start, ownerName, appName, options },
      eventDeviceCountOperationSpec
    );
  }

  /**
   * Count of events per session by interval in the time range.
   * @param eventName The id of the event.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  eventPerSessionCount(
    eventName: string,
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventPerSessionCountOptionalParams
  ): Promise<AnalyticsEventPerSessionCountResponse> {
    return this.client.sendOperationRequest(
      { eventName, start, ownerName, appName, options },
      eventPerSessionCountOperationSpec
    );
  }

  /**
   * Count of events per device by interval in the time range.
   * @param eventName The id of the event.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  eventPerDeviceCount(
    eventName: string,
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventPerDeviceCountOptionalParams
  ): Promise<AnalyticsEventPerDeviceCountResponse> {
    return this.client.sendOperationRequest(
      { eventName, start, ownerName, appName, options },
      eventPerDeviceCountOperationSpec
    );
  }

  /**
   * Delete the set of Events with the specified event names.
   * @param eventName The id of the event.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  eventsDelete(
    eventName: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventsDeleteOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { eventName, ownerName, appName, options },
      eventsDeleteOperationSpec
    );
  }

  /**
   * Count of active events in the time range ordered by event.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  events(
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventsOptionalParams
  ): Promise<AnalyticsEventsResponse> {
    return this.client.sendOperationRequest(
      { start, ownerName, appName, options },
      eventsOperationSpec
    );
  }

  /**
   * Delete the set of Events with the specified event names.
   * @param eventName The id of the event.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  eventsDeleteLogs(
    eventName: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsEventsDeleteLogsOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { eventName, ownerName, appName, options },
      eventsDeleteLogsOperationSpec
    );
  }

  /**
   * Count of total downloads for the provided distribution releases.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param releases Array of post-content-schema-releasesItem
   * @param options The options parameters.
   */
  distributionReleaseCounts(
    ownerName: string,
    appName: string,
    releases: PostContentSchemaReleasesItem[],
    options?: AnalyticsDistributionReleaseCountsOptionalParams
  ): Promise<AnalyticsDistributionReleaseCountsResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, releases, options },
      distributionReleaseCountsOperationSpec
    );
  }

  /**
   * Percentage of crash-free device by day in the time range based on the selected versions. Api will
   * return -1 if crash devices is greater than active devices.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param version test
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  crashFreeDevicePercentages(
    start: Date,
    version: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsCrashFreeDevicePercentagesOptionalParams
  ): Promise<AnalyticsCrashFreeDevicePercentagesResponse> {
    return this.client.sendOperationRequest(
      { start, version, ownerName, appName, options },
      crashFreeDevicePercentagesOperationSpec
    );
  }

  /**
   * Overall crashes and affected users count of the selected crash group with selected version.
   * Available for UWP apps only.
   * @param crashGroupId The id of the crash group.
   * @param version test
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  crashGroupTotals(
    crashGroupId: string,
    version: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsCrashGroupTotalsOptionalParams
  ): Promise<AnalyticsCrashGroupTotalsResponse> {
    return this.client.sendOperationRequest(
      { crashGroupId, version, ownerName, appName, options },
      crashGroupTotalsOperationSpec
    );
  }

  /**
   * Top OSes of the selected crash group with selected version. Available for UWP apps only.
   * @param crashGroupId The id of the crash group.
   * @param version test
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  crashGroupOperatingSystemCounts(
    crashGroupId: string,
    version: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsCrashGroupOperatingSystemCountsOptionalParams
  ): Promise<AnalyticsCrashGroupOperatingSystemCountsResponse> {
    return this.client.sendOperationRequest(
      { crashGroupId, version, ownerName, appName, options },
      crashGroupOperatingSystemCountsOperationSpec
    );
  }

  /**
   * Top models of the selected crash group with selected version. Available for UWP apps only.
   * @param crashGroupId The id of the crash group.
   * @param version test
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  crashGroupModelCounts(
    crashGroupId: string,
    version: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsCrashGroupModelCountsOptionalParams
  ): Promise<AnalyticsCrashGroupModelCountsResponse> {
    return this.client.sendOperationRequest(
      { crashGroupId, version, ownerName, appName, options },
      crashGroupModelCountsOperationSpec
    );
  }

  /**
   * Count of crashes by day in the time range of the selected crash group with selected version.
   * Available for UWP apps only.
   * @param crashGroupId The id of the crash group.
   * @param version test
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  crashGroupCounts(
    crashGroupId: string,
    version: string,
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsCrashGroupCountsOptionalParams
  ): Promise<AnalyticsCrashGroupCountsResponse> {
    return this.client.sendOperationRequest(
      { crashGroupId, version, start, ownerName, appName, options },
      crashGroupCountsOperationSpec
    );
  }

  /**
   * Overall crashes and affected users count of the selected crash groups with selected versions.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param crashGroups Array of post-content-schema-crash_groupsItem
   * @param options The options parameters.
   */
  crashGroupsTotals(
    ownerName: string,
    appName: string,
    crashGroups: PostContentSchemaCrashGroupsItem[],
    options?: AnalyticsCrashGroupsTotalsOptionalParams
  ): Promise<AnalyticsCrashGroupsTotalsResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, crashGroups, options },
      crashGroupsTotalsOperationSpec
    );
  }

  /**
   * Count of crashes by day in the time range based the selected versions. Available for UWP apps only.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  crashCounts(
    start: Date,
    ownerName: string,
    appName: string,
    options?: AnalyticsCrashCountsOptionalParams
  ): Promise<AnalyticsCrashCountsResponse> {
    return this.client.sendOperationRequest(
      { start, ownerName, appName, options },
      crashCountsOperationSpec
    );
  }

  /**
   * Returns whether audience definition exists.
   * @param audienceName The name of the audience
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  audienceNameExists(
    audienceName: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsAudienceNameExistsOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { audienceName, ownerName, appName, options },
      audienceNameExistsOperationSpec
    );
  }

  /**
   * Deletes audience definition.
   * @param audienceName The name of the audience
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  deleteAudience(
    audienceName: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsDeleteAudienceOptionalParams
  ): Promise<void> {
    return this.client.sendOperationRequest(
      { audienceName, ownerName, appName, options },
      deleteAudienceOperationSpec
    );
  }

  /**
   * Gets audience definition.
   * @param audienceName The name of the audience
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  getAudience(
    audienceName: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsGetAudienceOptionalParams
  ): Promise<AnalyticsGetAudienceResponse> {
    return this.client.sendOperationRequest(
      { audienceName, ownerName, appName, options },
      getAudienceOperationSpec
    );
  }

  /**
   * Creates or updates audience definition.
   * @param audienceName The name of the audience
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param audience Audience definition
   * @param options The options parameters.
   */
  createOrUpdateAudience(
    audienceName: string,
    ownerName: string,
    appName: string,
    audience: Paths2Mes8QV01AppsOwnerNameAppNameAnalyticsAudiencesAudienceNamePutRequestbodyContentApplicationJsonSchema,
    options?: AnalyticsCreateOrUpdateAudienceOptionalParams
  ): Promise<AnalyticsCreateOrUpdateAudienceResponse> {
    return this.client.sendOperationRequest(
      { audienceName, ownerName, appName, audience, options },
      createOrUpdateAudienceOperationSpec
    );
  }

  /**
   * Get list of device property values.
   * @param propertyName Device property
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  listDevicePropertyValues(
    propertyName: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsListDevicePropertyValuesOptionalParams
  ): Promise<AnalyticsListDevicePropertyValuesResponse> {
    return this.client.sendOperationRequest(
      { propertyName, ownerName, appName, options },
      listDevicePropertyValuesOperationSpec
    );
  }

  /**
   * Get list of device properties.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  listDeviceProperties(
    ownerName: string,
    appName: string,
    options?: AnalyticsListDevicePropertiesOptionalParams
  ): Promise<AnalyticsListDevicePropertiesResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, options },
      listDevicePropertiesOperationSpec
    );
  }

  /**
   * Get list of custom properties.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  listCustomProperties(
    ownerName: string,
    appName: string,
    options?: AnalyticsListCustomPropertiesOptionalParams
  ): Promise<AnalyticsListCustomPropertiesResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, options },
      listCustomPropertiesOperationSpec
    );
  }

  /**
   * Tests audience definition.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param audience Audience definition
   * @param options The options parameters.
   */
  testAudience(
    ownerName: string,
    appName: string,
    audience: Paths16F7ScgV01AppsOwnerNameAppNameAnalyticsAudiencesDefinitionTestPostRequestbodyContentApplicationJsonSchema,
    options?: AnalyticsTestAudienceOptionalParams
  ): Promise<AnalyticsTestAudienceResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, audience, options },
      testAudienceOperationSpec
    );
  }

  /**
   * Get list of audiences.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  listAudiences(
    ownerName: string,
    appName: string,
    options?: AnalyticsListAudiencesOptionalParams
  ): Promise<AnalyticsListAudiencesResponse> {
    return this.client.sendOperationRequest(
      { ownerName, appName, options },
      listAudiencesOperationSpec
    );
  }

  /**
   * Count of active devices by interval in the time range.
   * @param start Start date time in data in ISO 8601 date time format.
   * @param appBuild test
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  deviceCounts(
    start: Date,
    appBuild: string,
    ownerName: string,
    appName: string,
    options?: AnalyticsDeviceCountsOptionalParams
  ): Promise<AnalyticsDeviceCountsResponse> {
    return this.client.sendOperationRequest(
      { start, appBuild, ownerName, appName, options },
      deviceCountsOperationSpec
    );
  }
}
// Operation Specifications
const serializer = coreClient.createSerializer(Mappers, /* isXml */ false);

const versionsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/versions",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1Lu7Qn2V01AppsOwnerNameAppNameAnalyticsVersionsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1M0Rs3DV01AppsOwnerNameAppNameAnalyticsVersionsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.top1,
    Parameters.start,
    Parameters.end,
    Parameters.versions
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const perDeviceCountsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/sessions_per_device",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsG2CzwV01AppsOwnerNameAppNameAnalyticsSessionsPerDeviceGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsXdv8KgV01AppsOwnerNameAppNameAnalyticsSessionsPerDeviceGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.start,
    Parameters.end,
    Parameters.versions,
    Parameters.interval
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const sessionDurationsDistributionOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/session_durations_distribution",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsLck9IlV01AppsOwnerNameAppNameAnalyticsSessionDurationsDistributionGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsE9HufsV01AppsOwnerNameAppNameAnalyticsSessionDurationsDistributionGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start, Parameters.end, Parameters.versions],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const sessionCountsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/session_counts",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "Paths1Exxd1EV01AppsOwnerNameAppNameAnalyticsSessionCountsGetResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.PathsOfz5BuV01AppsOwnerNameAppNameAnalyticsSessionCountsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.start,
    Parameters.end,
    Parameters.versions,
    Parameters.interval
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const placeCountsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/places",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsRxbv8DV01AppsOwnerNameAppNameAnalyticsPlacesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1B7RutuV01AppsOwnerNameAppNameAnalyticsPlacesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.top1,
    Parameters.start,
    Parameters.end,
    Parameters.versions
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const operatingSystemCountsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/oses",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths19DmkkdV01AppsOwnerNameAppNameAnalyticsOsesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1G1UvgvV01AppsOwnerNameAppNameAnalyticsOsesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.top1,
    Parameters.start,
    Parameters.end,
    Parameters.versions
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const modelCountsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/models",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths814LkhV01AppsOwnerNameAppNameAnalyticsModelsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsGaffajV01AppsOwnerNameAppNameAnalyticsModelsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.top1,
    Parameters.start,
    Parameters.end,
    Parameters.versions
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const logFlowOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/log_flow",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsW9Dr0CV01AppsOwnerNameAppNameAnalyticsLogFlowGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsYucxmuV01AppsOwnerNameAppNameAnalyticsLogFlowGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start1],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const languageCountsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/languages",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsD2NxbnV01AppsOwnerNameAppNameAnalyticsLanguagesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1MghrhbV01AppsOwnerNameAppNameAnalyticsLanguagesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.top1,
    Parameters.start,
    Parameters.end,
    Parameters.versions
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const genericLogFlowOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/generic_log_flow",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths14I7I2XV01AppsOwnerNameAppNameAnalyticsGenericLogFlowGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1McyotlV01AppsOwnerNameAppNameAnalyticsGenericLogFlowGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start1],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const eventPropertyCountsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/events/{event_name}/properties/{event_property_name}/counts",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsC87RxV01AppsOwnerNameAppNameAnalyticsEventsEventNamePropertiesEventPropertyNameCountsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths10Zy7X0V01AppsOwnerNameAppNameAnalyticsEventsEventNamePropertiesEventPropertyNameCountsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.start,
    Parameters.end,
    Parameters.versions,
    Parameters.top4
  ],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.eventName,
    Parameters.eventPropertyName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const eventPropertiesOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/events/{event_name}/properties",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsU48L8WV01AppsOwnerNameAppNameAnalyticsEventsEventNamePropertiesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsAk50KdV01AppsOwnerNameAppNameAnalyticsEventsEventNamePropertiesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.eventName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const eventCountOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/events/{event_name}/event_count",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsTigd7TV01AppsOwnerNameAppNameAnalyticsEventsEventNameEventCountGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsJjlrfvV01AppsOwnerNameAppNameAnalyticsEventsEventNameEventCountGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start, Parameters.end, Parameters.versions],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.eventName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const eventDeviceCountOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/events/{event_name}/device_count",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsZz2O50V01AppsOwnerNameAppNameAnalyticsEventsEventNameDeviceCountGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsBei5L3V01AppsOwnerNameAppNameAnalyticsEventsEventNameDeviceCountGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start, Parameters.end, Parameters.versions],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.eventName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const eventPerSessionCountOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/events/{event_name}/count_per_session",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1Ggxk2EV01AppsOwnerNameAppNameAnalyticsEventsEventNameCountPerSessionGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsE2Fo6FV01AppsOwnerNameAppNameAnalyticsEventsEventNameCountPerSessionGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start, Parameters.end, Parameters.versions],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.eventName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const eventPerDeviceCountOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/events/{event_name}/count_per_device",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1Eiee2V01AppsOwnerNameAppNameAnalyticsEventsEventNameCountPerDeviceGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1Z0SaeV01AppsOwnerNameAppNameAnalyticsEventsEventNameCountPerDeviceGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start, Parameters.end, Parameters.versions],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.eventName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const eventsDeleteOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/events/{event_name}",
  httpMethod: "DELETE",
  responses: {
    200: {},
    default: {
      bodyMapper:
        Mappers.Paths1Al4Sp3V01AppsOwnerNameAppNameAnalyticsEventsEventNameDeleteResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.eventName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const eventsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/events",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsDtblk4V01AppsOwnerNameAppNameAnalyticsEventsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1L7Des7V01AppsOwnerNameAppNameAnalyticsEventsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.top1,
    Parameters.orderby,
    Parameters.skip,
    Parameters.start,
    Parameters.end,
    Parameters.versions,
    Parameters.eventName1,
    Parameters.inlinecount2
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const eventsDeleteLogsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/event_logs/{event_name}",
  httpMethod: "DELETE",
  responses: {
    200: {},
    default: {
      bodyMapper:
        Mappers.PathsH4Oq3ZV01AppsOwnerNameAppNameAnalyticsEventLogsEventNameDeleteResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.eventName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const distributionReleaseCountsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/distribution/release_counts",
  httpMethod: "POST",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1Vmnk7OV01AppsOwnerNameAppNameAnalyticsDistributionReleaseCountsPostResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths12681XzV01AppsOwnerNameAppNameAnalyticsDistributionReleaseCountsPostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { releases: ["releases"] },
    mapper: {
      ...Mappers.Paths1Pzxl78V01AppsOwnerNameAppNameAnalyticsDistributionReleaseCountsPostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const crashFreeDevicePercentagesOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/crashfree_device_percentages",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1Evy1PhV01AppsOwnerNameAppNameAnalyticsCrashfreeDevicePercentagesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths10VcmexV01AppsOwnerNameAppNameAnalyticsCrashfreeDevicePercentagesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start, Parameters.end, Parameters.version1],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const crashGroupTotalsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/crash_groups/{crash_group_id}/overall",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsBb6J7UV01AppsOwnerNameAppNameAnalyticsCrashGroupsCrashGroupIdOverallGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths167FplzV01AppsOwnerNameAppNameAnalyticsCrashGroupsCrashGroupIdOverallGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.version1],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.crashGroupId
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const crashGroupOperatingSystemCountsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/crash_groups/{crash_group_id}/operating_systems",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1U5H2EiV01AppsOwnerNameAppNameAnalyticsCrashGroupsCrashGroupIdOperatingSystemsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths19Xl0HvV01AppsOwnerNameAppNameAnalyticsCrashGroupsCrashGroupIdOperatingSystemsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.top1, Parameters.version1],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.crashGroupId
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const crashGroupModelCountsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/crash_groups/{crash_group_id}/models",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths130SxupV01AppsOwnerNameAppNameAnalyticsCrashGroupsCrashGroupIdModelsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1Tx0U3UV01AppsOwnerNameAppNameAnalyticsCrashGroupsCrashGroupIdModelsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.top1, Parameters.version1],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.crashGroupId
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const crashGroupCountsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/crash_groups/{crash_group_id}/crash_counts",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1NileprV01AppsOwnerNameAppNameAnalyticsCrashGroupsCrashGroupIdCrashCountsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsYwx8WzV01AppsOwnerNameAppNameAnalyticsCrashGroupsCrashGroupIdCrashCountsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start, Parameters.end, Parameters.version1],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.crashGroupId
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const crashGroupsTotalsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/crash_groups",
  httpMethod: "POST",
  responses: {
    200: {
      bodyMapper: {
        type: {
          name: "Sequence",
          element: {
            type: {
              name: "Composite",
              className:
                "PathsP18M6YV01AppsOwnerNameAppNameAnalyticsCrashGroupsPostResponses200ContentApplicationJsonSchemaItems"
            }
          }
        }
      }
    },
    default: {
      bodyMapper:
        Mappers.PathsCy68FjV01AppsOwnerNameAppNameAnalyticsCrashGroupsPostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: {
    parameterPath: { crashGroups: ["crashGroups"] },
    mapper: {
      ...Mappers.PathsDc3Tj4V01AppsOwnerNameAppNameAnalyticsCrashGroupsPostRequestbodyContentApplicationJsonSchema,
      required: true
    }
  },
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const crashCountsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/crash_counts",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths5Ga8JpV01AppsOwnerNameAppNameAnalyticsCrashCountsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsY5XlfzV01AppsOwnerNameAppNameAnalyticsCrashCountsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.start, Parameters.end, Parameters.versions],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const audienceNameExistsOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences/{audience_name}",
  httpMethod: "HEAD",
  responses: {
    204: {},
    404: {},
    default: {
      bodyMapper:
        Mappers.Paths14Gegw4V01AppsOwnerNameAppNameAnalyticsAudiencesAudienceNameHeadResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.audienceName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const deleteAudienceOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences/{audience_name}",
  httpMethod: "DELETE",
  responses: {
    204: {},
    404: {},
    default: {
      bodyMapper:
        Mappers.Paths1Bu61Q9V01AppsOwnerNameAppNameAnalyticsAudiencesAudienceNameDeleteResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.audienceName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const getAudienceOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences/{audience_name}",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths1Tl18ZeV01AppsOwnerNameAppNameAnalyticsAudiencesAudienceNameGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsIepcj0V01AppsOwnerNameAppNameAnalyticsAudiencesAudienceNameGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.audienceName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const createOrUpdateAudienceOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences/{audience_name}",
  httpMethod: "PUT",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsAem3LcV01AppsOwnerNameAppNameAnalyticsAudiencesAudienceNamePutResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1Tedeb8V01AppsOwnerNameAppNameAnalyticsAudiencesAudienceNamePutResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: Parameters.audience,
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.audienceName
  ],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const listDevicePropertyValuesOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences/metadata/device_properties/{property_name}/values",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsOw62VsV01AppsOwnerNameAppNameAnalyticsAudiencesMetadataDevicePropertiesPropertyNameValuesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1IjxfyzV01AppsOwnerNameAppNameAnalyticsAudiencesMetadataDevicePropertiesPropertyNameValuesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.contains],
  urlParameters: [
    Parameters.$host,
    Parameters.ownerName,
    Parameters.appName,
    Parameters.propertyName
  ],
  headerParameters: [Parameters.accept],
  serializer
};
const listDevicePropertiesOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences/metadata/device_properties",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths3Bwm02V01AppsOwnerNameAppNameAnalyticsAudiencesMetadataDevicePropertiesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsW9NyjxV01AppsOwnerNameAppNameAnalyticsAudiencesMetadataDevicePropertiesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const listCustomPropertiesOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences/metadata/custom_properties",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths6Mckw0V01AppsOwnerNameAppNameAnalyticsAudiencesMetadataCustomPropertiesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1X2Ro5DV01AppsOwnerNameAppNameAnalyticsAudiencesMetadataCustomPropertiesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const testAudienceOperationSpec: coreClient.OperationSpec = {
  path:
    "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences/definition/test",
  httpMethod: "POST",
  responses: {
    200: {
      bodyMapper:
        Mappers.Paths3SvqoyV01AppsOwnerNameAppNameAnalyticsAudiencesDefinitionTestPostResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1Wwaiu3V01AppsOwnerNameAppNameAnalyticsAudiencesDefinitionTestPostResponsesDefaultContentApplicationJsonSchema
    }
  },
  requestBody: Parameters.audience1,
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.contentType, Parameters.accept],
  mediaType: "json",
  serializer
};
const listAudiencesOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/audiences",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsTx3PmsV01AppsOwnerNameAppNameAnalyticsAudiencesGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.PathsEq5Uq6V01AppsOwnerNameAppNameAnalyticsAudiencesGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [Parameters.includeDisabled],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
const deviceCountsOperationSpec: coreClient.OperationSpec = {
  path: "/v0.1/apps/{owner_name}/{app_name}/analytics/active_device_counts",
  httpMethod: "GET",
  responses: {
    200: {
      bodyMapper:
        Mappers.PathsKudmomV01AppsOwnerNameAppNameAnalyticsActiveDeviceCountsGetResponses200ContentApplicationJsonSchema
    },
    default: {
      bodyMapper:
        Mappers.Paths1Lned21V01AppsOwnerNameAppNameAnalyticsActiveDeviceCountsGetResponsesDefaultContentApplicationJsonSchema
    }
  },
  queryParameters: [
    Parameters.start,
    Parameters.end,
    Parameters.versions,
    Parameters.appBuild1
  ],
  urlParameters: [Parameters.$host, Parameters.ownerName, Parameters.appName],
  headerParameters: [Parameters.accept],
  serializer
};
