load("//bazel:build.bzl", "redpanda_cc_library")
load("//src/v/rpc:compiler.bzl", "redpanda_cc_rpc_library")

redpanda_cc_library(
    name = "run_quota",
    hdrs = [
        "archival/run_quota.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        "//src/v/utils:named_type",
    ],
)

redpanda_cc_rpc_library(
    name = "bootstrap_rpc",
    src = "cluster_bootstrap.json",
)

redpanda_cc_rpc_library(
    name = "controller_rpc",
    src = "controller.json",
)

redpanda_cc_rpc_library(
    name = "metadata_rpc",
    src = "metadata_dissemination_rpc.json",
)

redpanda_cc_rpc_library(
    name = "id_allocator_rpc",
    src = "id_allocator.json",
)

redpanda_cc_rpc_library(
    name = "tx_gateway_rpc",
    src = "tx_gateway.json",
)

redpanda_cc_rpc_library(
    name = "partition_balancer_rpc",
    src = "partition_balancer_rpc.json",
)

redpanda_cc_rpc_library(
    name = "node_status_rpc",
    src = "node_status_rpc.json",
)

redpanda_cc_rpc_library(
    name = "ephemeral_credential_rpc",
    src = "ephemeral_credential_rpc.json",
)

redpanda_cc_rpc_library(
    name = "self_test_rpc",
    src = "self_test_rpc.json",
)

redpanda_cc_rpc_library(
    name = "topic_recovery_status_rpc",
    src = "topic_recovery_status_rpc.json",
)

redpanda_cc_rpc_library(
    name = "offsets_recovery_rpc",
    src = "offsets_recovery_rpc.json",
)

redpanda_cc_rpc_library(
    name = "tx_manager_migrator_rpc",
    src = "migrations/tx_manager_migrator.json",
    out = "tx_manager_migrator_service.h",
)

redpanda_cc_rpc_library(
    name = "data_migrations_rpc",
    src = "data_migration_rpc.json",
)

redpanda_cc_library(
    name = "version",
    hdrs = [
        "version.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        "//src/v/utils:named_type",
    ],
)

redpanda_cc_library(
    name = "features",
    hdrs = [
        "feature_update_action.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        "//src/v/serde",
        "//src/v/serde:enum",
        "//src/v/serde:sstring",
        "@seastar",
    ],
)

redpanda_cc_library(
    name = "notification",
    hdrs = [
        "notification.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        "//src/v/utils:named_type",
    ],
)

redpanda_cc_library(
    name = "snapshot",
    hdrs = [
        "snapshot.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        "//src/v/base",
    ],
)

redpanda_cc_library(
    name = "nt_revision",
    hdrs = [
        "nt_revision.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        "//src/v/model",
        "//src/v/serde",
        "@abseil-cpp//absl/hash",
    ],
)

redpanda_cc_library(
    name = "topic_configuration",
    srcs = [
        "remote_topic_properties.cc",
        "topic_configuration.cc",
        "topic_properties.cc",
    ],
    hdrs = [
        "remote_topic_properties.h",
        "topic_configuration.h",
        "topic_properties.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        "//src/v/cloud_storage:remote_label",
        "//src/v/model",
        "//src/v/pandaproxy:subject_name_strategy",
        "//src/v/reflection:adl",
        "//src/v/serde",
        "//src/v/serde:chrono",
        "//src/v/serde:optional",
        "//src/v/serde:tristate",
        "//src/v/storage",
        "//src/v/utils:tristate",
        "@seastar",
    ],
)

redpanda_cc_library(
    name = "offsets_lookup",
    srcs = [
        "cloud_metadata/offsets_lookup.cc",
        "cloud_metadata/offsets_lookup_batcher.cc",
        "cloud_metadata/offsets_recoverer.cc",
        "cloud_metadata/offsets_recovery_manager.cc",
        "cloud_metadata/offsets_uploader.cc",
    ],
    hdrs = [
        "cloud_metadata/offsets_lookup.h",
        "cloud_metadata/offsets_lookup_batcher.h",
        "cloud_metadata/offsets_lookup_rpc_types.h",
        "cloud_metadata/offsets_recoverer.h",
        "cloud_metadata/offsets_recovery_manager.h",
        "cloud_metadata/offsets_uploader.h",
        "errc.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        ":cloud_metadata_offsets_recovery_router",
        "//src/v/base",
        "//src/v/cloud_storage",
        "//src/v/cloud_storage_clients",
        "//src/v/cluster",
        "//src/v/config",
        "//src/v/container:fragmented_vector",
        "//src/v/kafka/data:partition_proxy",
        "//src/v/kafka/protocol",
        "//src/v/kafka/server",
        "//src/v/model",
        "//src/v/rpc",
        "//src/v/serde",
        "//src/v/ssx:future_util",
        "//src/v/utils:retry_chain_node",
        "@abseil-cpp//absl/container:btree",
        "@abseil-cpp//absl/container:node_hash_set",
        "@seastar",
    ],
)

# TODO the following headers are the only headers in redpanda which are excluded
# from clang-tidy. if you remove the exclusion then you'll observe a tangled web
# of header dependencies. after many hours those have not yet been resolved, so
# they are excluded here so that we don't hold up clang-tidy from being applied
# to the entire tree.

redpanda_cc_library(
    name = "cloud_metadata_offsets_recovery_router",
    hdrs = [
        "cloud_metadata/offsets_recovery_router.h",
    ],
    include_prefix = "cluster",
    tags = ["noclangtidy"],
    visibility = ["//visibility:public"],
)

redpanda_cc_library(
    name = "cloud_metadata_offsets_recovery_service",
    hdrs = [
        "cloud_metadata/offsets_recovery_service.h",
    ],
    include_prefix = "cluster",
    tags = ["noclangtidy"],
    visibility = ["//visibility:public"],
)

redpanda_cc_library(
    name = "cloud_metadata_offsets_upload_router",
    hdrs = [
        "cloud_metadata/offsets_upload_router.h",
    ],
    include_prefix = "cluster",
    tags = ["noclangtidy"],
    visibility = ["//visibility:public"],
)

redpanda_cc_library(
    name = "state_machine_registry",
    hdrs = [
        "state_machine_registry.h",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        "//src/v/raft",
    ],
)

redpanda_cc_library(
    name = "cluster",
    srcs = [
        "archival/adjacent_segment_merger.cc",
        "archival/adjacent_segment_run.cc",
        "archival/archival_metadata_stm.cc",
        "archival/archival_policy.cc",
        "archival/archiver_manager.cc",
        "archival/archiver_operations_api.cc",
        "archival/archiver_operations_impl.cc",
        "archival/archiver_scheduler_api.cc",
        "archival/archiver_scheduler_impl.cc",
        "archival/async_data_uploader.cc",
        "archival/ntp_archiver_service.cc",
        "archival/probe.cc",
        "archival/purger.cc",
        "archival/retention_calculator.cc",
        "archival/scrubber.cc",
        "archival/segment_reupload.cc",
        "archival/types.cc",
        "archival/upload_controller.cc",
        "archival/upload_housekeeping_service.cc",
        "bootstrap_backend.cc",
        "bootstrap_service.cc",
        "client_quota_backend.cc",
        "client_quota_frontend.cc",
        "client_quota_serde.cc",
        "client_quota_store.cc",
        "cloud_metadata/cluster_manifest.cc",
        "cloud_metadata/cluster_recovery_backend.cc",
        "cloud_metadata/key_utils.cc",
        "cloud_metadata/manifest_downloads.cc",
        "cloud_metadata/producer_id_recovery_manager.cc",
        "cloud_metadata/uploader.cc",
        "cloud_storage_size_reducer.cc",
        "cluster_discovery.cc",
        "cluster_recovery_manager.cc",
        "cluster_recovery_reconciler.cc",
        "cluster_recovery_table.cc",
        "cluster_utils.cc",
        "config_frontend.cc",
        "config_manager.cc",
        "controller.cc",
        "controller_api.cc",
        "controller_backend.cc",
        "controller_log_limiter.cc",
        "controller_probe.cc",
        "controller_snapshot.cc",
        "controller_stm.cc",
        "data_migrated_resources.cc",
        "data_migration_backend.cc",
        "data_migration_frontend.cc",
        "data_migration_irpc_frontend.cc",
        "data_migration_service_handler.cc",
        "data_migration_table.cc",
        "data_migration_types.cc",
        "data_migration_worker.cc",
        "drain_manager.cc",
        "ephemeral_credential_frontend.cc",
        "ephemeral_credential_service.cc",
        "errors.cc",
        "feature_backend.cc",
        "feature_barrier.cc",
        "feature_manager.cc",
        "health_manager.cc",
        "health_monitor_backend.cc",
        "health_monitor_frontend.cc",
        "health_monitor_types.cc",
        "id_allocator.cc",
        "id_allocator_frontend.cc",
        "id_allocator_stm.cc",
        "inventory_service.cc",
        "log_eviction_stm.cc",
        "logger.cc",
        "members_backend.cc",
        "members_frontend.cc",
        "members_manager.cc",
        "members_table.cc",
        "metadata_cache.cc",
        "metadata_dissemination_handler.cc",
        "metadata_dissemination_service.cc",
        "metrics_reporter.cc",
        "migrations/tx_manager_migrator.cc",
        "node/local_monitor.cc",
        "node/types.cc",
        "node_isolation_watcher.cc",
        "node_status_backend.cc",
        "node_status_rpc_handler.cc",
        "notification_latch.cc",
        "partition.cc",
        "partition_balancer_backend.cc",
        "partition_balancer_planner.cc",
        "partition_balancer_rpc_handler.cc",
        "partition_balancer_state.cc",
        "partition_leaders_table.cc",
        "partition_manager.cc",
        "partition_probe.cc",
        "partition_properties_stm.cc",
        "partition_recovery_manager.cc",
        "plugin_backend.cc",
        "plugin_frontend.cc",
        "plugin_table.cc",
        "producer_state.cc",
        "producer_state_manager.cc",
        "remote_topic_configuration_source.cc",
        "rm_partition_frontend.cc",
        "rm_stm.cc",
        "rm_stm_types.cc",
        "scheduling/allocation_node.cc",
        "scheduling/allocation_state.cc",
        "scheduling/allocation_strategy.cc",
        "scheduling/constraints.cc",
        "scheduling/leader_balancer.cc",
        "scheduling/leader_balancer_constraints.cc",
        "scheduling/leader_balancer_probe.cc",
        "scheduling/partition_allocator.cc",
        "scheduling/types.cc",
        "security_frontend.cc",
        "security_manager.cc",
        "self_test/cloudcheck.cc",
        "self_test/diskcheck.cc",
        "self_test/netcheck.cc",
        "self_test_backend.cc",
        "self_test_frontend.cc",
        "self_test_rpc_handler.cc",
        "self_test_rpc_types.cc",
        "service.cc",
        "shard_balancer.cc",
        "shard_placement_table.cc",
        "tm_stm.cc",
        "tm_stm_types.cc",
        "topic_recovery_service.cc",
        "topic_recovery_status_frontend.cc",
        "topic_recovery_status_rpc_handler.cc",
        "topic_recovery_status_types.cc",
        "topic_recovery_validator.cc",
        "topic_table.cc",
        "topic_table_partition_generator.cc",
        "topic_table_probe.cc",
        "topic_updates_dispatcher.cc",
        "topics_frontend.cc",
        "tx_errc.cc",
        "tx_gateway.cc",
        "tx_gateway_frontend.cc",
        "tx_helpers.cc",
        "tx_protocol_types.cc",
        "tx_topic_manager.cc",
        "types.cc",
    ],
    hdrs = [
        "archival/adjacent_segment_merger.h",
        "archival/adjacent_segment_run.h",
        "archival/archival_metadata_stm.h",
        "archival/archival_policy.h",
        "archival/archiver_manager.h",
        "archival/archiver_operations_api.h",
        "archival/archiver_operations_impl.h",
        "archival/archiver_scheduler_api.h",
        "archival/archiver_scheduler_impl.h",
        "archival/async_data_uploader.h",
        "archival/fwd.h",
        "archival/logger.h",
        "archival/ntp_archiver_service.h",
        "archival/probe.h",
        "archival/purger.h",
        "archival/retention_calculator.h",
        "archival/scrubber.h",
        "archival/scrubber_scheduler.h",
        "archival/segment_reupload.h",
        "archival/types.h",
        "archival/upload_controller.h",
        "archival/upload_housekeeping_service.h",
        "bootstrap_backend.h",
        "bootstrap_service.h",
        "bootstrap_types.h",
        "client_quota_backend.h",
        "client_quota_frontend.h",
        "client_quota_serde.h",
        "client_quota_store.h",
        "cloud_metadata/cluster_manifest.h",
        "cloud_metadata/cluster_recovery_backend.h",
        "cloud_metadata/error_outcome.h",
        "cloud_metadata/key_utils.h",
        "cloud_metadata/manifest_downloads.h",
        "cloud_metadata/offsets_recovery_rpc_types.h",
        "cloud_metadata/offsets_snapshot.h",
        "cloud_metadata/offsets_upload_rpc_types.h",
        "cloud_metadata/producer_id_recovery_manager.h",
        "cloud_metadata/types.h",
        "cloud_metadata/uploader.h",
        "cloud_storage_size_reducer.h",
        "cluster_bootstrap_service.h",
        "cluster_discovery.h",
        "cluster_recovery_manager.h",
        "cluster_recovery_reconciler.h",
        "cluster_recovery_state.h",
        "cluster_recovery_table.h",
        "cluster_utils.h",
        "cluster_uuid.h",
        "commands.h",
        "config_frontend.h",
        "config_manager.h",
        "controller.h",
        "controller_api.h",
        "controller_backend.h",
        "controller_log_limiter.h",
        "controller_probe.h",
        "controller_service.h",
        "controller_snapshot.h",
        "controller_stm.h",
        "data_migrated_resources.h",
        "data_migration_backend.h",
        "data_migration_frontend.h",
        "data_migration_irpc_frontend.h",
        "data_migration_rpc_service.h",
        "data_migration_service_handler.h",
        "data_migration_table.h",
        "data_migration_types.h",
        "data_migration_worker.h",
        "distributed_kv_stm.h",
        "distributed_kv_stm_types.h",
        "drain_manager.h",
        "ephemeral_credential_frontend.h",
        "ephemeral_credential_rpc_service.h",
        "ephemeral_credential_serde.h",
        "ephemeral_credential_service.h",
        "errc.h",
        "feature_backend.h",
        "feature_barrier.h",
        "feature_manager.h",
        "fwd.h",
        "health_manager.h",
        "health_monitor_backend.h",
        "health_monitor_frontend.h",
        "health_monitor_types.h",
        "id_allocator.h",
        "id_allocator_frontend.h",
        "id_allocator_service.h",
        "id_allocator_stm.h",
        "inventory_service.h",
        "leader_router.h",
        "log_eviction_stm.h",
        "logger.h",
        "members_backend.h",
        "members_frontend.h",
        "members_manager.h",
        "members_table.h",
        "metadata_cache.h",
        "metadata_dissemination_handler.h",
        "metadata_dissemination_rpc_service.h",
        "metadata_dissemination_service.h",
        "metadata_dissemination_types.h",
        "metrics_reporter.h",
        "migrations/tx_manager_migrator.h",
        "migrations/tx_manager_migrator_handler.h",
        "migrations/tx_manager_migrator_types.h",
        "namespaced_cache.h",
        "node/local_monitor.h",
        "node/types.h",
        "node_isolation_watcher.h",
        "node_status_backend.h",
        "node_status_rpc_handler.h",
        "node_status_rpc_service.h",
        "node_status_rpc_types.h",
        "node_status_table.h",
        "notification.h",
        "notification_latch.h",
        "ntp_callbacks.h",
        "offsets_recovery_rpc_service.h",
        "partition.h",
        "partition_balancer_backend.h",
        "partition_balancer_planner.h",
        "partition_balancer_rpc_handler.h",
        "partition_balancer_rpc_service.h",
        "partition_balancer_state.h",
        "partition_balancer_types.h",
        "partition_leaders_table.h",
        "partition_manager.h",
        "partition_probe.h",
        "partition_properties_stm.h",
        "partition_recovery_manager.h",
        "plugin_backend.h",
        "plugin_frontend.h",
        "plugin_table.h",
        "prefix_truncate_record.h",
        "producer_state.h",
        "producer_state_manager.h",
        "raft0_utils.h",
        "remote_topic_configuration_source.h",
        "remote_topic_properties.h",
        "rm_group_proxy.h",
        "rm_partition_frontend.h",
        "rm_stm.h",
        "rm_stm_types.h",
        "scheduling/allocation_node.h",
        "scheduling/allocation_state.h",
        "scheduling/allocation_strategy.h",
        "scheduling/constraints.h",
        "scheduling/leader_balancer.h",
        "scheduling/leader_balancer_constraints.h",
        "scheduling/leader_balancer_probe.h",
        "scheduling/leader_balancer_random.h",
        "scheduling/leader_balancer_strategy.h",
        "scheduling/leader_balancer_types.h",
        "scheduling/partition_allocator.h",
        "scheduling/types.h",
        "security_frontend.h",
        "security_manager.h",
        "self_test/cloudcheck.h",
        "self_test/diskcheck.h",
        "self_test/metrics.h",
        "self_test/netcheck.h",
        "self_test_backend.h",
        "self_test_frontend.h",
        "self_test_rpc_handler.h",
        "self_test_rpc_service.h",
        "self_test_rpc_types.h",
        "service.h",
        "shard_balancer.h",
        "shard_placement_table.h",
        "shard_table.h",
        "simple_batch_builder.h",
        "snapshot.h",
        "tm_stm.h",
        "tm_stm_types.h",
        "topic_configuration.h",
        "topic_properties.h",
        "topic_recovery_service.h",
        "topic_recovery_status_frontend.h",
        "topic_recovery_status_rpc_handler.h",
        "topic_recovery_status_rpc_service.h",
        "topic_recovery_status_types.h",
        "topic_recovery_validator.h",
        "topic_table.h",
        "topic_table_partition_generator.h",
        "topic_table_probe.h",
        "topic_updates_dispatcher.h",
        "topic_validators.h",
        "topics_frontend.h",
        "tx_coordinator_mapper.h",
        "tx_errc.h",
        "tx_gateway.h",
        "tx_gateway_frontend.h",
        "tx_gateway_service.h",
        "tx_hash_ranges.h",
        "tx_helpers.h",
        "tx_manager_migrator_service.h",
        "tx_protocol_types.h",
        "tx_topic_manager.h",
        "tx_utils.h",
        "types.h",
        "version.h",
    ],
    implementation_deps = [
        "//src/v/features:enterprise_feature_messages",
    ],
    include_prefix = "cluster",
    visibility = ["//visibility:public"],
    deps = [
        ":bootstrap_rpc",
        ":data_migrations_rpc",
        ":ephemeral_credential_rpc",
        ":features",
        ":id_allocator_rpc",
        ":metadata_rpc",
        ":node_status_rpc",
        ":nt_revision",
        ":offsets_recovery_rpc",
        ":partition_balancer_rpc",
        ":run_quota",
        ":self_test_rpc",
        ":state_machine_registry",
        ":topic_recovery_status_rpc",
        ":tx_gateway_rpc",
        ":tx_manager_migrator_rpc",
        "//src/v/base",
        "//src/v/bytes",
        "//src/v/bytes:iobuf",
        "//src/v/bytes:iobuf_parser",
        "//src/v/bytes:iostream",
        "//src/v/bytes:streambuf",
        "//src/v/cloud_storage",
        "//src/v/cloud_storage:remote_label",
        "//src/v/cloud_storage:topic_mount_manifest_path",
        "//src/v/cloud_storage_clients",
        "//src/v/cloud_topics/dl_stm",
        "//src/v/cloud_topics/dl_stm:dl_stm_api",
        "//src/v/config",
        "//src/v/container:chunked_hash_map",
        "//src/v/container:contiguous_range_map",
        "//src/v/container:fragmented_vector",
        "//src/v/container:intrusive",
        "//src/v/features",
        "//src/v/features:enterprise_features",
        "//src/v/finjector",
        "//src/v/hashing:murmur",
        "//src/v/hashing:secure",
        "//src/v/hashing:xx",
        "//src/v/http",
        "//src/v/json",
        "//src/v/kafka/protocol",
        "//src/v/metrics",
        "//src/v/model",
        "//src/v/model:fips_config",
        "//src/v/net",
        "//src/v/pandaproxy:config",
        "//src/v/pandaproxy:subject_name_strategy",
        "//src/v/raft",
        "//src/v/random:fast_prng",
        "//src/v/random:generators",
        "//src/v/random:time_jitter",
        "//src/v/reflection:adl",
        "//src/v/resource_mgmt:io_priority",
        "//src/v/rpc",
        "//src/v/security",
        "//src/v/security:license",
        "//src/v/serde",
        "//src/v/serde:bool_class",
        "//src/v/serde:chrono",
        "//src/v/serde:enum",
        "//src/v/serde:inet_address",
        "//src/v/serde:iobuf",
        "//src/v/serde:map",
        "//src/v/serde:named_type",
        "//src/v/serde:optional",
        "//src/v/serde:set",
        "//src/v/serde:sstring",
        "//src/v/serde:tristate",
        "//src/v/serde:uuid",
        "//src/v/serde:variant",
        "//src/v/serde:vector",
        "//src/v/ssx:async_algorithm",
        "//src/v/ssx:async_clear",
        "//src/v/ssx:event",
        "//src/v/ssx:future_util",
        "//src/v/ssx:semaphore",
        "//src/v/ssx:sformat",
        "//src/v/ssx:single_sharded",
        "//src/v/ssx:sleep_abortable",
        "//src/v/storage",
        "//src/v/storage:parser_utils",
        "//src/v/storage:record_batch_builder",
        "//src/v/storage:record_batch_utils",
        "//src/v/strings:string_switch",
        "//src/v/strings:utf8",
        "//src/v/utils:auto_fmt",
        "//src/v/utils:available_promise",
        "//src/v/utils:directory_walker",
        "//src/v/utils:exceptions",
        "//src/v/utils:expiring_promise",
        "//src/v/utils:file_io",
        "//src/v/utils:fixed_string",
        "//src/v/utils:hdr_hist",
        "//src/v/utils:human",
        "//src/v/utils:lazy_abort_source",
        "//src/v/utils:move_canary",
        "//src/v/utils:moving_average",
        "//src/v/utils:mutex",
        "//src/v/utils:named_type",
        "//src/v/utils:notification_list",
        "//src/v/utils:prefix_logger",
        "//src/v/utils:retry",
        "//src/v/utils:retry_chain_node",
        "//src/v/utils:rwlock",
        "//src/v/utils:stable_iterator",
        "//src/v/utils:stream_provider",
        "//src/v/utils:stream_utils",
        "//src/v/utils:to_string",
        "//src/v/utils:token_bucket",
        "//src/v/utils:tristate",
        "//src/v/utils:unresolved_address",
        "//src/v/utils:uuid",
        "//src/v/utils:waiter_queue",
        "//src/v/v8_engine",
        "//src/v/version",
        "@abseil-cpp//absl/algorithm:container",
        "@abseil-cpp//absl/container:btree",
        "@abseil-cpp//absl/container:flat_hash_map",
        "@abseil-cpp//absl/container:flat_hash_set",
        "@abseil-cpp//absl/container:node_hash_map",
        "@abseil-cpp//absl/container:node_hash_set",
        "@abseil-cpp//absl/hash",
        "@abseil-cpp//absl/strings",
        "@boost//:algorithm",
        "@boost//:circular_buffer",
        "@boost//:intrusive",
        "@boost//:iterator",
        "@boost//:lexical_cast",
        "@boost//:msm",
        "@boost//:outcome",
        "@boost//:random",
        "@boost//:range",
        "@boost//:uuid",
        "@fmt",
        "@rapidjson",
        "@roaring",
        "@seastar",
    ],
)
