# 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_binary.bzl", "cc_binary")
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_test.bzl", "cc_test")

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

cc_binary(
    name = "c2pa_validate",
    srcs = ["asset_validator_main.cc"],
    deps = [
        "//crypto:crypto_read_handler",
        "//crypto/default:default_crypto_read_handler",
        "//utils:crjson",
        "//utils:media_type",
        "//validator:asset_validator_impl",
        "//validator:result",
        "//validator:validator_options",
        "@abseil-cpp//absl/flags:flag",
        "@abseil-cpp//absl/flags:parse",
        "@abseil-cpp//absl/flags:usage",
        "@abseil-cpp//absl/log:initialize",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@nlohmann_json//:json",
        "@protobuf",
        "@riegeli//riegeli/bytes:cfile_reader",
    ],
)

cc_library(
    name = "asset_writer",
    srcs = ["asset_writer.cc"],
    hdrs = ["asset_writer.h"],
    deps = [
        "//claim:local_signer",
        "//crypto:crypto_write_handler",
        "//crypto:hash",
        "//crypto:templated_crypto_write_handler",
        "//crypto/default:hasher",
        "//formats/bmff:writer",
        "//formats/gif:writer",
        "//formats/id3:writer",
        "//formats/jpeg:writer",
        "//formats/pdf:writer",
        "//formats/png:writer",
        "//formats/riff:writer",
        "//formats/tiff:writer",
        "//formats/zip:writer",
        "//generator",
        "//generator:generator_factory",
        "//generator:generator_options",
        "//proto:generator_cc_proto",
        "//testing:local_key_crypto_write_handler",
        "//utils:media_type",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@riegeli//riegeli/bytes:cfile_reader",
        "@riegeli//riegeli/bytes:cfile_writer",
        "@riegeli//riegeli/bytes:reader",
        "@riegeli//riegeli/bytes:writer",
    ],
)

cc_binary(
    name = "asset_write",
    srcs = ["asset_write_main.cc"],
    deps = [
        ":asset_writer",
        "//crypto/default:pem",
        "//proto:generator_cc_proto",
        "//testing:local_key_crypto_write_handler",
        "@abseil-cpp//absl/flags:flag",
        "@abseil-cpp//absl/flags:parse",
        "@abseil-cpp//absl/flags:usage",
        "@abseil-cpp//absl/log:initialize",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@protobuf",
    ],
)

cc_test(
    name = "asset_writer_test",
    srcs = ["asset_writer_test.cc"],
    data = [
        "//formats/zip/testing:assets",
    ],
    deps = [
        ":asset_writer",
        "//crypto/default:default_crypto_read_handler",
        "//formats/bmff:extractor",
        "//formats/bmff:test_utils",
        "//formats/gif:constants",
        "//formats/gif:extractor",
        "//formats/gif:test_builder",
        "//formats/id3:extractor",
        "//formats/jpeg:extractor",
        "//formats/jpeg/testing:jpeg_creator",
        "//formats/pdf:extractor",
        "//formats/png:extractor",
        "//formats/png:test_utils",
        "//formats/riff:create_riff",
        "//formats/riff:extractor",
        "//formats/tiff:constants",
        "//formats/tiff:extractor",
        "//formats/zip:extractor",
        "//proto:generator_cc_proto",
        "//proto:manifest_cc_proto",
        "//proto:validation_status_cc_proto",
        "//testing:crypto_testing",
        "//testing:local_key_crypto_write_handler",
        "//testing:test_file_utils",
        "//validator:asset_validator_impl",
        "//validator:validator_options",
        "@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",
        "@boringssl//:crypto",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/bytes:cfile_reader",
        "@riegeli//riegeli/bytes:string_reader",
        "@riegeli//riegeli/bytes:string_writer",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)
