#ifndef QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_
#define QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_

#include <string>
#include <utility>

#include "absl/strings/string_view.h"

namespace http2 {
namespace adapter {

// Represents a source of DATA frames for transmission to the peer.
class DataFrameSource {
 public:
  virtual ~DataFrameSource() {}

  static constexpr ssize_t kBlocked = 0;
  static constexpr ssize_t kError = -1;

  // Returns the number of bytes to send in the next DATA frame, and whether
  // this frame indicates the end of the data. Returns kBlocked if blocked,
  // kError on error.
  virtual std::pair<ssize_t, bool> SelectPayloadLength(size_t max_length) = 0;

  // This method is called with a frame header and a payload length to send. The
  // source should send or buffer the entire frame.
  virtual void Send(absl::string_view frame_header, size_t payload_length) = 0;

  // If true, the end of this data source indicates the end of the stream.
  // Otherwise, this data will be followed by trailers.
  virtual bool send_fin() const = 0;
};

// Represents a HTTP message body.
class DataSource {
 public:
  virtual ~DataSource() {}

  enum State {
    // The source is not done, but cannot currently provide more data.
    NOT_READY,
    // The source can provide more data.
    READY,
    // The source is done.
    DONE,
  };

  State state() const { return state_; }

  // The next range of data provided by this data source.
  virtual absl::string_view NextData() const = 0;

  // Indicates that |bytes| bytes have been consumed by the caller.
  virtual void Consume(size_t bytes) = 0;

 protected:
  State state_ = NOT_READY;
};

// A simple implementation constructible from a string_view or std::string.
class StringDataSource : public DataSource {
 public:
  explicit StringDataSource(std::string data);

  absl::string_view NextData() const override;
  void Consume(size_t bytes) override;

 private:
  const std::string data_;
  absl::string_view remaining_;
};

}  // namespace adapter
}  // namespace http2

#endif  // QUICHE_HTTP2_ADAPTER_DATA_SOURCE_H_
