#ifndef QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_H_
#define QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_H_

#include <string>
#include <vector>

#include "absl/strings/string_view.h"
#include "common/platform/api/quiche_export.h"

namespace http2 {
namespace adapter {

enum class HeaderType : uint8_t {
  REQUEST,
  REQUEST_TRAILER,
  RESPONSE_100,
  RESPONSE,
  RESPONSE_TRAILER,
};

class QUICHE_EXPORT_PRIVATE HeaderValidator {
 public:
  HeaderValidator() {}

  // If called, this validator will allow the `:protocol` pseudo-header, as
  // described in RFC 8441.
  void AllowConnect() { allow_connect_ = true; }

  void StartHeaderBlock();

  enum HeaderStatus {
    HEADER_OK,
    HEADER_FIELD_INVALID,
  };
  HeaderStatus ValidateSingleHeader(absl::string_view key,
                                    absl::string_view value);

  // Returns true if all required pseudoheaders and no extra pseudoheaders are
  // present for the given header type.
  bool FinishHeaderBlock(HeaderType type);

  // For responses, returns the value of the ":status" header, if present.
  absl::string_view status_header() const { return status_; }

 private:
  std::vector<std::string> pseudo_headers_;
  std::string status_;
  std::string method_;
  bool allow_connect_ = false;
};

}  // namespace adapter
}  // namespace http2

#endif  // QUICHE_HTTP2_ADAPTER_HEADER_VALIDATOR_H_
