/**
 * Copyright 2023 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


export declare namespace google.ads.integration {
  /**
   * Auth access config to launch the Ads app.
   */
  export interface AuthAccess {
    oauthTokenAccess?: google.ads.integration.OAuthTokenAccess;
  }
}
export declare namespace google.ads.integration {
  export interface OAuthTokenAccess {
    /**
     * Access token string generated by Google OAuth 2.0.
     */
    token?: string;
  }
}
export declare namespace google.ads.integration {
  /**
   * Debugging Config to launch the Ads app.
   */
  export interface DebuggingConfig {
    /**
     * Environment setup to launch the Ads app. Currently we support
     * environments: 'PROD' and 'QA_PROD'
     */
    env?: google.ads.integration.Environment;
  }
}
export declare namespace google.ads.integration {
  /**
   * Config required to launch the Ads app.
   */
  export interface Config {
    authAccess?: google.ads.integration.AuthAccess;
    clientConfig?: google.ads.integration.ClientConfig;
    /**
     * The ISO language code of Google Ads app, e.g. 'de' for Germany.
     */
    locale?: string;
    /**
     * Debugging config to launch the Ads app.
     */
    debuggingConfig?: google.ads.integration.DebuggingConfig;
  }
}
export declare namespace google.ads.integration {
  /**
   * Client config required to launch the Ads app.
   */
  export interface ClientConfig {
    /**
     * The container element id to launch the Ads app.
     */
    contentContainer?: string;
  }
}

export declare namespace google.ads.integration {
  /**
   * Environment choices to launch the Ads App.
   */
  export const enum Environment {
    PROD = 'PROD',
    QA_PROD = 'QA_PROD',
  }
}
