// 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 name of the host image family released by Cloud Android team
  optional string stable_host_image_family = 17;
  // [CVD only] The project that the stable host image is released to
  optional string stable_host_image_project = 18;

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

  optional string stable_goldfish_host_image_project = 20;

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

  // Desired hw_property
  optional string hw_property = 22;

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

  // [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 = 25;

  // 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 = 26;

  // 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 = 27;

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

  // [CVD only] Version of fetch_cvd to use.
  optional string fetch_cvd_version = 29;

  // [CVD only] Enable multi stage function.
  optional bool enable_multi_stage = 30;

  // [CHEEPS only] The name of the L1 betty image (used with Cheeps controller)
  optional string betty_image = 31;
}
