// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#ifndef THIRD_PARTY_CREDENTIO_VALIDATOR_INGREDIENT_RESULT_CONVERTER_H_
#define THIRD_PARTY_CREDENTIO_VALIDATOR_INGREDIENT_RESULT_CONVERTER_H_

#include <memory>
#include <utility>

#include "absl/status/statusor.h"
#include "proto/ingredient_validation_result.pb.h"
#include "proto/validation_result.pb.h"
#include "validator/ingredient_result.h"
#include "validator/manifest_consumer.h"
#include "validator/result.h"

namespace credentio {

// Converts a validation result into the ingredient validation result that
// describes it.
class IngredientResultConverter {
 public:
  IngredientResultConverter() = default;

  // The consumer is notified of every validated manifest and then of the
  // completed result, which is how callers add information the converter does
  // not derive itself, such as the digital source type.
  explicit IngredientResultConverter(std::unique_ptr<ManifestConsumer> consumer)
      : consumer_(std::move(consumer)) {}

  absl::StatusOr<std::unique_ptr<IngredientResult>> Convert(
      ValidationResult validation_result) const;

 private:
  absl::StatusOr<std::unique_ptr<IngredientValidationResultProto>> ConvertProto(
      const ValidationResultProto& validation_result) const;

  std::unique_ptr<ManifestConsumer> consumer_;
};

}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_VALIDATOR_INGREDIENT_RESULT_CONVERTER_H_
