// Copyright 2014 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 COMPONENTS_COPRESENCE_PUBLIC_COPRESENCE_DELEGATE_H_
#define COMPONENTS_COPRESENCE_PUBLIC_COPRESENCE_DELEGATE_H_

#include <string>
#include <vector>

#include "base/callback_forward.h"

namespace net {
class URLRequestContextGetter;
}

namespace copresence {

class Message;
class WhispernetClient;

enum CopresenceStatus { SUCCESS, FAIL };

// Callback type to send a status.
typedef base::Callback<void(CopresenceStatus)> StatusCallback;

// A delegate interface for users of Copresence.
class CopresenceDelegate {
 public:
  // This method will be called when we have subscribed messages that need to
  // be sent to their respective apps.
  virtual void HandleMessages(
      const std::string& app_id,
      const std::string& subscription_id,
      const std::vector<Message>& message) = 0;

  virtual net::URLRequestContextGetter* GetRequestContext() const = 0;

  virtual const std::string GetPlatformVersionString() const = 0;

  virtual const std::string GetAPIKey() const = 0;

  virtual WhispernetClient* GetWhispernetClient() = 0;
};

}  // namespace copresence

#endif  // COMPONENTS_COPRESENCE_PUBLIC_COPRESENCE_DELEGATE_H_