#ifndef PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_HTTP_CONNECTION_H_
#define PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_HTTP_CONNECTION_H_

#include <cstddef>
#include <cstdint>
#include <memory>
#include <string>

#include "absl/functional/any_invocable.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
#include "absl/time/time.h"

// NOLINTBEGIN(readability/boost)
#include "boost/asio/ip/tcp.hpp"
#include "boost/beast/core.hpp"
#include "boost/beast/core/tcp_stream.hpp"
#include "boost/beast/http.hpp"
#include "boost/beast/http/string_body.hpp"
#include "boost/beast/version.hpp"
// NOLINTEND(readability/boost)

#include "nlohmann/json_fwd.hpp"

namespace safepower_agent {

namespace beast = boost::beast;
namespace http = beast::http;

using boost::beast::tcp_stream;

class HttpConnection : public std::enable_shared_from_this<HttpConnection> {
 public:
  explicit HttpConnection(absl::Duration connection_timeout = absl::Seconds(10),
                          absl::Duration write_timeout = absl::Seconds(10));

  void PerformConnection(
      http::verb verb, absl::string_view target,
      absl::AnyInvocable<void(absl::StatusOr<nlohmann::json>) &&> callback,
      const nlohmann::json& body, absl::string_view ip = "127.0.0.1",
      uint16_t port = 80);

  void Write(beast::error_code ec);
  void Read(beast::error_code ec, size_t bytes_transferred);
  void Callback(beast::error_code ec, std::size_t bytes_transferred);

 private:
  http::verb verb_;
  std::string target_;
  std::string body_;
  beast::tcp_stream stream_;
  beast::flat_buffer buffer_;
  absl::AnyInvocable<void(absl::StatusOr<nlohmann::json>) &&>
      provided_callback_;
  http::request<http::string_body> req_;
  http::response<http::string_body> res_;
  boost::asio::ip::tcp::endpoint end_point_;
  absl::Duration connection_timeout_;
  absl::Duration write_timeout_;
};

}  // namespace safepower_agent

#endif  // PRODUCTION_BORG_MGMT_NODE_PROXY_SAFEPOWER_SAFEPOWER_AGENT_BMC_HTTP_CONNECTION_H_
