# 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 = "constants",
    hdrs = ["constants.h"],
    deps = [
        "@abseil-cpp//absl/strings:string_view",
    ],
)

cc_library(
    name = "chunk_header",
    hdrs = ["chunk_header.h"],
    deps = [
        ":constants",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/strings",
        "@riegeli//riegeli/bytes:reader",
        "@riegeli//riegeli/bytes:writer",
        "@riegeli//riegeli/endian:endian_reading",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_library(
    name = "reader",
    srcs = ["reader.cc"],
    hdrs = ["reader.h"],
    deps = [
        ":chunk_header",
        ":constants",
        "@abseil-cpp//absl/functional:function_ref",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@riegeli//riegeli/bytes:reader",
    ],
)

cc_test(
    name = "chunk_header_test",
    srcs = ["chunk_header_test.cc"],
    deps = [
        ":chunk_header",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/bytes:string_reader",
        "@riegeli//riegeli/bytes:string_writer",
    ],
)

cc_test(
    name = "reader_test",
    srcs = ["reader_test.cc"],
    deps = [
        ":create_riff",
        ":reader",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/bytes:string_reader",
        "@riegeli//riegeli/bytes:string_writer",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_test(
    name = "extractor_test",
    srcs = ["extractor_test.cc"],
    deps = [
        ":create_riff",
        ":extractor",
        "//formats:asset_box",
        "//formats:byte_range",
        "//formats:extractor_result",
        "//testing:jumbf_utils",
        "@abseil-cpp//absl/log:check",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/bytes:string_reader",
    ],
)

cc_library(
    name = "create_riff",
    testonly = 1,
    srcs = ["create_riff.cc"],
    hdrs = ["create_riff.h"],
    deps = [
        "@abseil-cpp//absl/log:check",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_library(
    name = "extractor",
    srcs = ["extractor.cc"],
    hdrs = ["extractor.h"],
    deps = [
        ":constants",
        ":reader",
        "//constants:labels",
        "//formats:asset_box",
        "//formats:byte_range",
        "//formats:extractor",
        "//jumbf:utils",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings:string_view",
        "@riegeli//riegeli/bytes:reader",
    ],
)

cc_library(
    name = "assessor",
    srcs = ["assessor.cc"],
    hdrs = ["assessor.h"],
    deps = [
        ":chunk_header",
        "//formats:assessor",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
        "@riegeli//riegeli/bytes:reader",
    ],
)

cc_test(
    name = "assessor_test",
    srcs = ["assessor_test.cc"],
    deps = [
        ":assessor",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/bytes:string_reader",
    ],
)

cc_library(
    name = "format",
    srcs = ["format.cc"],
    hdrs = ["format.h"],
    deps = [
        ":assessor",
        ":extractor",
        "//formats:format",
        "@abseil-cpp//absl/status:statusor",
    ],
)
