// 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_CLAIM_MANIFEST_BOX_H_
#define THIRD_PARTY_CREDENTIO_CLAIM_MANIFEST_BOX_H_

#include <optional>
#include <string>
#include <vector>

#include "claim/manifest_store_builder.h"
#include "proto/assertion.pb.h"
#include "proto/generator.pb.h"

namespace credentio {

// An intermediate representation of a manifest box to be used for claim
// generation.
struct ManifestBox {
  std::string label;
  std::string instance_id;
  Assertion hard_binding_assertion;
  Assertion actions_assertion;
  std::vector<Assertion> part_hash_assertions;
  std::optional<Assertion> multi_part_assertion;
  std::vector<Assertion> ingredient_assertions;
  std::vector<GatheredAssertion> gathered_assertions;
  ManifestStoreBuilder manifest_store_builder;
};

}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_CLAIM_MANIFEST_BOX_H_
