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

#ifndef REMOTING_HOST_GCD_STATE_UPDATER_H_
#define REMOTING_HOST_GCD_STATE_UPDATER_H_

#include <memory>
#include <string>

#include "base/callback.h"
#include "base/macros.h"
#include "base/threading/thread_checker.h"
#include "remoting/host/backoff_timer.h"
#include "remoting/host/gcd_rest_client.h"
#include "remoting/signaling/signal_strategy.h"

namespace base {
class TimeDelta;
}  // namespace base

namespace buzz {
class XmlElement;
}  // namespace buzz

namespace remoting {

// An object that uses GcdRestClient to send status updates to GCD
// when the XMPP connection state changes.
class GcdStateUpdater : public SignalStrategy::Listener {
 public:
  // |signal_strategy| must outlive this object. Updates will start
  // when the supplied SignalStrategy enters the CONNECTED state.
  //
  // |on_update_successful_callback| is invoked after the first successful
  // update.
  GcdStateUpdater(const base::Closure& on_update_successful_callback,
                  const base::Closure& on_unknown_host_id_error,
                  SignalStrategy* signal_strategy,
                  std::unique_ptr<GcdRestClient> gcd_client);
  ~GcdStateUpdater() override;

  // See HeartbeatSender::SetHostOfflineReason.
  void SetHostOfflineReason(
      const std::string& host_offline_reason,
      const base::TimeDelta& timeout,
      const base::Callback<void(bool success)>& ack_callback);

 private:
  // SignalStrategy::Listener interface.
  void OnSignalStrategyStateChange(SignalStrategy::State state) override;
  bool OnSignalStrategyIncomingStanza(const buzz::XmlElement* stanza) override;

  void OnPatchStateResult(GcdRestClient::Result result);
  void MaybeSendStateUpdate();

  base::Closure on_update_successful_callback_;
  base::Closure on_unknown_host_id_error_;
  SignalStrategy* signal_strategy_;
  std::unique_ptr<GcdRestClient> gcd_rest_client_;
  BackoffTimer timer_;
  base::ThreadChecker thread_checker_;
  std::string pending_request_jid_;

  DISALLOW_COPY_AND_ASSIGN(GcdStateUpdater);
};

}  // namespace remoting

#endif  // REMOTING_HOST_GCD_STATE_UPDATER_H_
