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

#ifndef REMOTING_HOST_IT2ME_RECONNECT_PARAMS_H_
#define REMOTING_HOST_IT2ME_RECONNECT_PARAMS_H_

#include <string>

#include "base/values.h"

namespace remoting {

struct ReconnectParams {
  ReconnectParams();
  ReconnectParams(const ReconnectParams& other);
  ReconnectParams(ReconnectParams&& other);
  ReconnectParams& operator=(const ReconnectParams& other);
  ReconnectParams& operator=(ReconnectParams&& other);
  ~ReconnectParams();

  // Helpers used to convert to/from a JSON dictionary.
  static base::DictValue ToDict(const ReconnectParams& params);
  static ReconnectParams FromDict(const base::DictValue& dict);

  // Verifies the structure contains valid data.
  bool IsValid() const;

  // The 7 digit host identifier used for Directory registration and lookups.
  std::string support_id;

  // The 5 digit host 'secret' used to establish a secure P2P connection.
  std::string host_secret;

  // A Base64 encoded string representing the host's private key.
  std::string private_key;

  // A UUID representing an endpoint in the FTL signaling service. This ID is
  // used to generate the registration ID which is used for endpoint targeting.
  std::string ftl_device_id;

  // Used to send a signaling message to notify the client that the host is
  // ready for a reconnection attempt. Required format for this field is:
  // user@domain.com/chromoting_ftl_<device_registration_uuid>
  std::string client_ftl_address;
};

}  // namespace remoting

#endif  // REMOTING_HOST_IT2ME_RECONNECT_PARAMS_H_
