// Copyright 2023 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 QUICHE_WEB_TRANSPORT_COMPLETE_BUFFER_VISITOR_H_
#define QUICHE_WEB_TRANSPORT_COMPLETE_BUFFER_VISITOR_H_

#include <optional>

#include "absl/utility/utility.h"
#include "quiche/common/quiche_callbacks.h"
#include "quiche/web_transport/web_transport.h"

namespace webtransport {

// A visitor that will buffer the entirety of the incoming stream into a string,
// and will send a pre-specified string all at once.
class QUICHE_EXPORT CompleteBufferVisitor : public StreamVisitor {
 public:
  using AllDataReadCallback = quiche::SingleUseCallback<void(std::string)>;

  CompleteBufferVisitor(webtransport::Stream* stream, std::string outgoing_data)
      : stream_(stream),
        outgoing_data_(absl::in_place, std::move(outgoing_data)) {}
  CompleteBufferVisitor(webtransport::Stream* stream,
                        AllDataReadCallback incoming_data_callback)
      : stream_(stream),
        incoming_data_callback_(absl::in_place,
                                std::move(incoming_data_callback)) {}
  CompleteBufferVisitor(webtransport::Stream* stream, std::string outgoing_data,
                        AllDataReadCallback incoming_data_callback)
      : stream_(stream),
        outgoing_data_(absl::in_place, std::move(outgoing_data)),
        incoming_data_callback_(absl::in_place,
                                std::move(incoming_data_callback)) {}

  void OnCanRead() override;
  void OnCanWrite() override;

  void OnResetStreamReceived(StreamErrorCode) override {}
  void OnStopSendingReceived(StreamErrorCode) override {}
  void OnWriteSideInDataRecvdState() override {}

 protected:
  void SetOutgoingData(std::string data);

 private:
  webtransport::Stream* stream_;
  std::optional<std::string> outgoing_data_;
  std::optional<AllDataReadCallback> incoming_data_callback_;
  std::string incoming_data_buffer_;
};

}  // namespace webtransport

#endif  // QUICHE_WEB_TRANSPORT_COMPLETE_BUFFER_VISITOR_H_
