// Copyright 2025 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.
#include "quiche/balsa/balsa_fuzz_util.h"

#include <optional>
#include <tuple>
#include <type_traits>

#include "quiche/balsa/http_validation_policy.h"
#include "quiche/common/platform/api/quiche_fuzztest.h"

namespace quiche {

fuzztest::Domain<HttpValidationPolicy> ArbitraryHttpValidationPolicy() {
  return fuzztest::StructOf<HttpValidationPolicy>(
      fuzztest::Arbitrary<bool>(), fuzztest::Arbitrary<bool>(),
      fuzztest::Arbitrary<bool>(), fuzztest::Arbitrary<bool>(),
      fuzztest::Arbitrary<bool>(), fuzztest::Arbitrary<bool>(),
      fuzztest::Arbitrary<bool>(), fuzztest::Arbitrary<bool>(),
      fuzztest::Arbitrary<bool>(), fuzztest::Arbitrary<bool>(),
      fuzztest::Arbitrary<bool>(), ArbitraryFirstLineValidationOption(),
      fuzztest::Arbitrary<bool>(), fuzztest::Arbitrary<bool>(),
      fuzztest::Arbitrary<bool>(), ArbitraryFirstLineValidationOption(),
      fuzztest::Arbitrary<bool>(),
      fuzztest::Arbitrary<bool>());
}

fuzztest::Domain<HttpValidationPolicy::FirstLineValidationOption>
ArbitraryFirstLineValidationOption() {
  using EnumType = HttpValidationPolicy::FirstLineValidationOption;
  using UnderlyingType =
      std::underlying_type_t<HttpValidationPolicy::FirstLineValidationOption>;
  return fuzztest::ReversibleMap(
      [](UnderlyingType x) -> EnumType {
        return static_cast<HttpValidationPolicy::FirstLineValidationOption>(x);
      },
      [](EnumType x) -> std::optional<std::tuple<UnderlyingType>> {
        return {static_cast<UnderlyingType>(x)};
      },
      fuzztest::InRange<UnderlyingType>(
          static_cast<UnderlyingType>(
              HttpValidationPolicy::FirstLineValidationOption::kMinValue),
          static_cast<UnderlyingType>(
              HttpValidationPolicy::FirstLineValidationOption::kMaxValue)));
}

}  // namespace quiche
