// Copyright 2016 The Android Open Source Project
//
// 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.

syntax = "proto2";

package acloud.internal.proto;

// Hold configurations from user.
message UserConfig {
  // Account information for accessing Cloud API
  optional string service_account_name = 1;
  optional string service_account_private_key_path = 2;

  // Compute Engine project name
  optional string project = 3;
  // Compute Engine zone name, e.g. "us-central1-f"
  optional string zone = 4;
  optional string machine_type = 5;
  // Compute Engine network name, e.g. "default"
  optional string network = 6;

  // SSH key configuration
  optional string ssh_private_key_path = 7;
  optional string ssh_public_key_path = 8;

  // Storage configuration
  optional string storage_bucket_name = 9;

  // Desired orientation, e.g. 'portrait' or 'landscape'
  optional string orientation = 10;
  // Desired resolution
  optional string resolution = 11;
  // Size of extra data disk.
  optional int32 extra_data_disk_size_gb = 12;
  // Metadata for creating Compute Engine instance
  map <string, string>  metadata_variable = 13;

  // client_id and client secret are required when user authenticates via
  // Oauth2 flow with their user account (not service account).
  //   * They are created in the cloud project console -> API manager.
  //   * They are used to authorize the app to talk to the cloud project
  //     on behalf of the user.
  //   * They by themselves do not authenticate the user.
  //   * They are stored as plain text in the configuration file so they are
  //     not that secret. Generally, we should not share it with people we
  //     don't trust.
  //   * All users talking to the same cloud project can share the same
  //     client_id and client_secret.
  optional string client_id = 14;
  optional string client_secret = 15;

  // [CVD only] The name of the stable host image released by Cloud Android team
  optional string stable_host_image_name = 16;
  // [CVD only] The project that the stable host image is released to
  optional string stable_host_image_project = 17;

  // [GOLDFISH only] The name of the stable host image released by Android
  // Emulator (emu-dev) team
  optional string stable_goldfish_host_image_name = 18;
  // [GOLDFISH only] The project that the stable goldfish host image is
  // released to (emu-dev-cts)

  optional string stable_goldfish_host_image_project = 19;

  // Account information for accessing Cloud API
  // This is the new way to provide service account auth.
  optional string service_account_json_private_key_path = 20;

  // Desired hw_property
  optional string hw_property = 21;

  // [CHEEPS only] The name of the stable host image released by the ARC
  // (arc-eng) team
  optional string stable_cheeps_host_image_name = 22;
  // [CHEEPS only] The project that the stable host image is released to
  optional string stable_cheeps_host_image_project = 23;

  // [CVD only] It will get passed into the launch_cvd command if not empty.
  // In version 0.7.2 and later.
  optional string launch_args = 24;

  // The pattern of the instance name, e.g. ins-{uuid}-{build_id}-{build_target}
  // the parts in {} will be automatically replaced with the actual value if
  // you specify them in the pattern, uuid will be automatically generated.
  optional string instance_name_pattern = 25;

  // List of scopes that will be given to the instance
  // https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes
  repeated string extra_scopes = 26;

  // Provide some additional parameters to build the ssh tunnel.
  optional string extra_args_ssh_tunnel = 27;
}
