# 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.
#

load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_test.bzl", "cc_test")

package(default_visibility = ["//visibility:public"])

cc_library(
    name = "generator",
    srcs = ["generator.cc"],
    hdrs = ["generator.h"],
    deps = [
        "//async:async_context",
        "//proto:generator_cc_proto",
        "@abseil-cpp//absl/functional:any_invocable",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/synchronization",
    ],
)

cc_library(
    name = "manifest_store_transformer",
    hdrs = ["manifest_store_transformer.h"],
    deps = [
        "//jumbf:box_builder",
        "@abseil-cpp//absl/status",
    ],
)

cc_library(
    name = "generator_impl",
    srcs = ["generator_impl.cc"],
    hdrs = ["generator_impl.h"],
    deps = [
        ":generator",
        ":manifest_store_transformer",
        "//async:async_context",
        "//cbor",
        "//claim:generator",
        "//claim:manifest_box",
        "//claim:manifest_box_assembler",
        "//claim:manifest_box_encoder",
        "//claim:manifest_store_view",
        "//cose:sig_structure",
        "//proto:bmff_based_hash_assertion_cbor_proto",
        "//proto:bmff_based_hash_assertion_cc_proto",
        "//proto:boxes_hash_assertion_cbor_proto",
        "//proto:boxes_hash_assertion_cc_proto",
        "//proto:collection_data_hash_assertion_cbor_proto",
        "//proto:collection_data_hash_assertion_cc_proto",
        "//proto:data_hash_assertion_cbor_proto",
        "//proto:data_hash_assertion_cc_proto",
        "//proto:generator_cc_proto",
        "//utils:cbor_padding",
        "@abseil-cpp//absl/base:nullability",
        "@abseil-cpp//absl/functional:any_invocable",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:cord",
        "@abseil-cpp//absl/strings:string_view",
    ],
)

cc_test(
    name = "generator_impl_test",
    srcs = ["generator_impl_test.cc"],
    deps = [
        ":generator",
        ":generator_impl",
        ":manifest_store_transformer",
        "//assertion:assertion_cbor_encoder",
        "//async:async_context",
        "//claim:claim_cbor_encoder",
        "//claim:generator",
        "//claim:local_signer",
        "//claim:manifest_box_assembler",
        "//claim:signer",
        "//crypto:algorithms",
        "//crypto:crypto_read_handler",
        "//crypto:crypto_write_handler",
        "//crypto/default:default_crypto_read_handler",
        "//crypto/default:hasher",
        "//formats/bmff:hasher",
        "//jumbf:box_builder",
        "//jumbf:constants",
        "//proto:bmff_based_hash_assertion_cc_proto",
        "//proto:boxes_hash_assertion_cc_proto",
        "//proto:collection_data_hash_assertion_cc_proto",
        "//proto:data_hash_assertion_cc_proto",
        "//proto:generator_cc_proto",
        "//proto:generator_info_cc_proto",
        "//proto:hashed_uri_cc_proto",
        "//proto:ingredient_validation_result_cc_proto",
        "//proto:manifest_cc_proto",
        "//proto:signature_info_cc_proto",
        "//proto:validation_result_cc_proto",
        "//salt:salt_generator",
        "//testing:create_test_crypto_write_handler",
        "//testing:manifest_store_test_utils",
        "//testing:proto_test_utils",
        "//uuid",
        "@abseil-cpp//absl/log:absl_check",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings:cord",
        "@abseil-cpp//absl/strings:string_view",
        "@abseil-cpp//absl/synchronization",
        "@googletest//:gtest_main",
        "@protobuf//:differencer",
    ],
)

cc_library(
    name = "generator_options",
    hdrs = ["generator_options.h"],
    deps = [
        ":manifest_store_transformer",
        "//assertion:assertion_cbor_encoder",
        "//claim:claim_cbor_encoder",
        "//claim:generator",
        "//claim:signer",
        "//constants:spec_version",
        "//crypto:hash",
        "//crypto/default:hasher",
        "//proto:generator_info_cc_proto",
        "//salt:random_salt_generator",
        "//salt:salt_generator",
        "//uuid",
        "@abseil-cpp//absl/base:nullability",
    ],
)

cc_library(
    name = "generator_factory",
    srcs = ["generator_factory.cc"],
    hdrs = ["generator_factory.h"],
    deps = [
        ":generator",
        ":generator_impl",
        ":generator_options",
        "//assertion:assertion_cbor_encoder",
        "//async:async_context",
        "//claim:claim_cbor_encoder",
        "//claim:generator",
        "//claim:manifest_box_assembler",
        "//claim:signer",
        "//crypto:hash",
        "//salt:salt_generator",
        "@abseil-cpp//absl/base:nullability",
        "@abseil-cpp//absl/functional:any_invocable",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
    ],
)

cc_test(
    name = "generator_factory_test",
    srcs = ["generator_factory_test.cc"],
    deps = [
        ":generator",
        ":generator_factory",
        ":generator_options",
        "//async:async_context",
        "//claim:generator",
        "//claim:manifest_box",
        "//claim:manifest_box_assembler",
        "//claim:signer",
        "//crypto:hash",
        "//proto:generator_cc_proto",
        "//proto:generator_info_cc_proto",
        "//salt:salt_generator",
        "//testing:proto_test_utils",
        "@abseil-cpp//absl/functional:any_invocable",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings:string_view",
        "@abseil-cpp//absl/synchronization",
        "@googletest//:gtest_main",
    ],
)
