# 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_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",
        "//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_encoder",
        "//claim:claim_cbor_encoder",
        "//claim:generator",
        "//claim:signer",
        "//constants:spec_version",
        "//crypto:hash",
        "//crypto/default:hasher",
        "//proto:generator_info_cc_proto",
        "//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_encoder",
        "//async:async_context",
        "//claim:claim_cbor_encoder",
        "//claim:generator",
        "//claim:manifest_box_assembler",
        "//claim:signer",
        "//crypto:hash",
        "@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",
        "@abseil-cpp//absl/functional:any_invocable",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings:string_view",
        "@abseil-cpp//absl/synchronization",
        "@googletest//:gtest_main",
    ],
)
