// Copyright 2015 The Weave 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 LIBWEAVE_SRC_PRIVET_DEVICE_DELEGATE_H_
#define LIBWEAVE_SRC_PRIVET_DEVICE_DELEGATE_H_

#include <memory>
#include <utility>

#include <base/callback.h>
#include <base/location.h>
#include <base/time/time.h>

namespace weave {

namespace provider {
class TaskRunner;
}

namespace privet {

// Interface to provide access to general information about device.
class DeviceDelegate {
 public:
  DeviceDelegate();
  virtual ~DeviceDelegate();

  // Returns HTTP ports for Privet. The first one is the primary port,
  // the second is the port for a pooling updates requests. The second value
  // could be 0. In this case the first port would be used for regular and for
  // updates requests.
  virtual std::pair<uint16_t, uint16_t> GetHttpEnpoint() const = 0;

  // The same |GetHttpEnpoint| but for HTTPS.
  virtual std::pair<uint16_t, uint16_t> GetHttpsEnpoint() const = 0;

  // Returns device uptime.
  virtual base::TimeDelta GetUptime() const = 0;

  // Returns the max request timeout of http server. Returns TimeDelta::Max() if
  // no timeout is set.
  virtual base::TimeDelta GetHttpRequestTimeout() const = 0;

  // Schedules a background task on the embedded TaskRunner.
  virtual void PostDelayedTask(const tracked_objects::Location& from_here,
                               const base::Closure& task,
                               base::TimeDelta delay) = 0;

  // Create default instance.
  static std::unique_ptr<DeviceDelegate> CreateDefault(
      provider::TaskRunner* task_runner,
      uint16_t http_port,
      uint16_t https_port,
      base::TimeDelta http_request_timeout);
};

}  // namespace privet
}  // namespace weave

#endif  // LIBWEAVE_SRC_PRIVET_DEVICE_DELEGATE_H_
