// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

option java_outer_classname = "CastAssistantLogs";
option java_package = "org.chromium.components.metrics";

package metrics;

// CastAssistant specific device information.
// Next id: 13
message CastAssistantLogsProto {
  // A unique id generated by the assistant client (approx. 11 bytes).
  // This is used to join the assistant client logs with speech logs.
  optional string request_id = 5;

  // Base64-encoded assistant server event id.
  // This is used to join the assistant client logs with server ones. For the
  // time being, this will be logged in addition to the event_id_list. However,
  // going forward this will be deprecated. Please see b/77491741.
  optional string event_id = 1;

  // A server generated key that is the same for all queries in a conversation.
  optional string conversation_key = 6 [deprecated = true];

  // GAIA ID of signed in user.
  // This is used to join the cast_assistant client logs with server ones.
  // cast_assistant_product_log_writer will move the contents of this field into
  // userinfo.userid and erase the original value.
  optional int64 gaia_id = 3;

  // Client id tied to device.
  optional fixed64 client_id = 4;

  // S3 experiment id.
  repeated string experiment_id = 8;

  // Release track that device uses to get updates. The value is the first 32
  // bits of the SHA-1 hash of the string which appears in the device
  // configuration service
  optional fixed32 virtual_release_track = 9;

  // Next id: 7
  message CastAssistantEventProto {
    // The name of the action, hashed by same logic used to hash user action
    // event and histogram.
    optional fixed64 name_hash = 1;

    // The timestamp for the event, in milliseconds.
    optional int64 time_msec = 2;

    // Deprecated
    optional int64 value = 3 [deprecated = true];

    // Optional value associated with the event. For example, may be used for
    // error codes.
    message Metadata {
      optional fixed64 name_hash = 1;
      optional int64 value = 2;
    }
    repeated Metadata metadata = 4;

    // Duo core version.
    optional fixed64 duo_core_version = 5;

    // Model version of hotword detector.
    optional string hotword_model_id = 6;
  }
  repeated CastAssistantEventProto cast_assistant_event = 2;

  // An identifier that is specific to the combination of app and device, in
  // this case the one used by backdrop. This will also be used for device
  // linking to enable cloud casting and other features. This identifier will be
  // consistent across sessions unless the device is factory reset, at which
  // time a new identifier will be generated. This identifier is a printable
  // ASCII string of not more than 64 characters (no spaces).
  optional string backdrop_app_device_id = 10;

  // List of event ids belonging to a particular interaction. One interaction
  // could receive multiple assistant outputs, hence multiple event ids. Client
  // should send this list for logging. Please see b/77491741 and
  // go/concurrent_event_ids for details.
  repeated string event_id_list = 12;
}
