// Copyright 2018 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.

module chromeos.multidevice.mojom;

import "mojo/public/mojom/base/time.mojom";

// Enumeration of software features which can be enabled/disabled for a given
// device. Each feature has a host and client portion; here, "host" refers to
// the associated phone which provides the feature (at most one host per
// account), and "client" refers to the Chromebook which consumes the feature
// (multiple clients allowed per account).
enum SoftwareFeature {
  // The Better Together (MultiDevice) setup flow feature allows users to go
  // through a unified setup flow which enrolls the device for all multi-device
  // features.
  BETTER_TOGETHER_HOST = 1,
  BETTER_TOGETHER_CLIENT = 2,

  // EasyUnlock gives users the ability to unlock their Chromebooks with their
  // phone instead of by typing a password.
  EASY_UNLOCK_HOST = 3,
  EASY_UNLOCK_CLIENT = 4,

  // Magic Tether (Instant Tethering) gives users the ability to use their
  // phone's Internet connectivity on their Chromebooks via an automated flow
  // which does not require any phone-side interaction.
  MAGIC_TETHER_HOST = 5,
  MAGIC_TETHER_CLIENT = 6,

  // SMS Connect gives users the ability to read and reply to their text
  // messages from their Chromebooks.
  SMS_CONNECT_HOST = 7,
  SMS_CONNECT_CLIENT = 8
};

// Enumeration of what value a SoftwareFeature can be.
enum SoftwareFeatureState {
  kNotSupported,
  kSupported,
  kEnabled
};

// Used to generate rotating BLE advertisement data, which is necessary to
// establish a BLE communication channel between two devices. To
// create the BLE channel, both devices must possess the other's BeaconSeeds.
struct BeaconSeed {
  string data;
  mojo_base.mojom.Time start_time;
  mojo_base.mojom.Time end_time;
};

// Metadata describing a remote device with which the current device can
// communicate.
struct RemoteDevice {
  // Unique identifier of the device. This field is guaranteed to be
  // human-readable (i.e., it does not contain non-ASCII characters).
  string device_id;

  // Identifier for the user to whom this device is registered.
  string user_id;

  // Human-readable device name; by default, this is the name of the device
  // model, but this value is editable.
  string device_name;

  // Encryption key used for communication with this device.
  string persistent_symmetric_key;

  // The time at which this device's metadata was last updated on the CryptAuth
  // back-end.
  mojo_base.mojom.Time last_update_time;

  // The features which this device either does not support, supports, or has
  // enabled.
  map<SoftwareFeature, SoftwareFeatureState> software_features;

  // Seeds belonging to the device. Each seed has start and end timestamps which
  // indicate how long the seed is valid, and each device has enough associated
  // seeds to keep the device connectable for over 30 days. If no new device
  // metadata synced for over 30 days, it is possible that a connection will not
  // be able to be established over BLE.
  array<BeaconSeed> beacon_seeds;
};
