// 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_RPC_HTTP_POST_H_
#define COMPONENTS_COPRESENCE_RPC_HTTP_POST_H_

#include <string>

#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "net/url_request/url_fetcher_delegate.h"

namespace google {
namespace protobuf {
class MessageLite;
}
}

namespace net {
class URLRequestContextGetter;
}

namespace copresence {

// This class handles all Apiary calls to the Copresence server.
// It configures the HTTP request appropriately and reports any errors.
// If deleted, the HTTP request is cancelled.
//
// TODO(ckehoe): Add retry logic.
class HttpPost : public net::URLFetcherDelegate {
 public:
  // Callback to receive the HTTP status code and body of the response
  // (if any). A pointer to this HttpPost object is also passed along.
  typedef base::Callback<void(int, const std::string&)>
      ResponseCallback;

  // Create a request to the Copresence server.
  // |url_context_getter| is owned by the caller,
  // and the context it provides must be available until the request completes.
  HttpPost(net::URLRequestContextGetter* url_context_getter,
           const std::string& server_host,
           const std::string& rpc_name,
           const std::string& tracing_token,
           std::string api_key,  // If blank, we overwrite with a default.
           const google::protobuf::MessageLite& request_proto);

  // HTTP requests are cancelled on delete.
  virtual ~HttpPost();

  // Send an HttpPost request.
  void Start(const ResponseCallback& response_callback);

 private:
  static const int kUrlFetcherId = 1;
  static const char kApiKeyField[];
  static const char kTracingTokenField[];

  friend class HttpPostTest;

  // Overridden from net::URLFetcherDelegate.
  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;

  ResponseCallback response_callback_;

  scoped_ptr<net::URLFetcher> url_fetcher_;

  DISALLOW_COPY_AND_ASSIGN(HttpPost);
};

}  // namespace copresence

#endif  // COMPONENTS_COPRESENCE_RPC_HTTP_POST_H_
