# Copyright 2024 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("@crate_index//:defs.bzl", "aliases")
load("@rules_rust//rust:defs.bzl", "rust_library")

cc_binary(
    name = "np_cpp_sample",
    srcs = ["nearby/presence/np_cpp_ffi/sample/main.cc"],
    copts = [
        "-Inearby/presence/np_c_ffi/include/cpp",
        "-Inearby/presence/np_cpp_ffi/include",
    ],
    deps = [
        ":np_c_ffi_types",
        ":np_cpp_ffi",
        "@absl//absl/strings",
    ],
)

cc_library(
    name = "np_cpp_ffi",
    srcs = ["nearby/presence/np_cpp_ffi/nearby_protocol.cc"],
    hdrs = ["nearby/presence/np_cpp_ffi/include/nearby_protocol.h"],
    copts = [
        "-Inearby/presence/np_cpp_ffi/include",
        "-Inearby/presence/np_c_ffi/include/cpp",
    ],
    deps = [
        ":np_c_ffi",
        "@absl//absl/status",
        "@absl//absl/status:statusor",
        "@absl//absl/strings",
        "@absl//absl/strings:str_format",
    ],
)

cc_library(
    name = "np_c_ffi",
    hdrs = [
        "nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_functions.h",
        "nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_types.h",
    ],
    deps = [":np_c_ffi_rust"],
)

cc_library(
    name = "np_c_ffi_types",
    hdrs = ["nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_types.h"],
)

rust_library(
    name = "np_c_ffi_rust",
    srcs = glob(include = ["nearby/presence/np_c_ffi/src/**/*.rs"]),
    crate_features = ["std"],
    deps = [
        ":lock_adapter",
        ":np_ffi_core",
    ],
)

rust_library(
    name = "np_ffi_core",
    srcs = glob(include = ["nearby/presence/np_ffi_core/src/**/*.rs"]),
    crate_features = ["crypto_provider/raw_private_key_permit"],
    proc_macro_deps = ["@crate_index//:strum_macros"],
    deps = [
        ":array_view",
        ":crypto_provider",
        ":crypto_provider_default",
        ":handle_map",
        ":ldt_np_adv",
        ":lock_adapter",
        ":np_adv",
        ":np_adv_dynamic",
        ":np_hkdf",
        "@crate_index//:lazy_static",
        "@crate_index//:strum",
    ],
)

rust_library(
    name = "np_adv_dynamic",
    srcs = glob(include = ["nearby/presence/np_adv_dynamic/src/**/*.rs"]),
    deps = [
        ":array_view",
        ":crypto_provider",
        ":np_adv",
        ":sink",
        "@crate_index//:thiserror",
    ],
)

rust_library(
    name = "handle_map",
    srcs = glob(include = ["common/handle_map/src/**/*.rs"]),
    deps = [":lock_adapter"],
)

rust_library(
    name = "lock_adapter",
    srcs = glob(include = ["common/lock_adapter/src/**/*.rs"]),
    crate_features = ["std"],
)

rust_library(
    name = "np_adv",
    srcs = glob(include = ["nearby/presence/np_adv/src/**/*.rs"]),
    crate_features = ["alloc"],
    proc_macro_deps = ["@crate_index//:strum_macros"],
    deps = [
        ":array_view",
        ":crypto_provider",
        ":ldt",
        ":ldt_np_adv",
        ":np_ed25519",
        ":np_hkdf",
        ":sink",
        ":xts_aes",
        "@crate_index//:lazy_static",
        "@crate_index//:nom",
        "@crate_index//:strum",
        "@crate_index//:tinyvec",
    ],
)

rust_library(
    name = "np_ed25519",
    srcs = glob(
        include = ["nearby/presence/np_ed25519/src/**/*.rs"],
    ),
    deps = [
        ":array_view",
        ":crypto_provider",
        ":ldt",
        ":sink",
        ":xts_aes",
        "@crate_index//:tinyvec",
    ],
)

cc_binary(
    name = "main",
    srcs = ["nearby/presence/ldt_np_adv_ffi/c/sample/main.c"],
    deps = [":ldt_np_adv_ffi"],
)

cc_library(
    name = "ldt_np_adv_ffi",
    hdrs = ["nearby/presence/ldt_np_adv_ffi/c/include/np_ldt.h"],
    includes = ["nearby/presence/ldt_np_adv_ffi/c/include"],
    deps = [":ldt_np_adv_ffi_rust"],
)

rust_library(
    name = "ldt_np_adv_ffi_rust",
    srcs = glob(["nearby/presence/ldt_np_adv_ffi/src/**/*.rs"]),
    crate_features = ["std"],
    deps = [
        ":crypto_provider",
        ":crypto_provider_default",
        ":ldt",
        ":ldt_np_adv",
        ":np_hkdf",
        "@crate_index//:cfg-if",
        "@crate_index//:lazy_static",
    ],
)

rust_library(
    name = "ldt_np_adv",
    srcs = glob(["nearby/presence/ldt_np_adv/src/**/*.rs"]),
    deps = [
        ":array_view",
        ":crypto_provider",
        ":ldt",
        ":np_hkdf",
        ":xts_aes",
    ],
)

rust_library(
    name = "np_hkdf",
    srcs = glob(["nearby/presence/np_hkdf/src/**/*.rs"]),
    deps = [
        ":crypto_provider",
        ":ldt",
        ":xts_aes",
    ],
)

rust_library(
    name = "crypto_provider",
    srcs = glob(["nearby/crypto/crypto_provider/src/**/*.rs"]),
    crate_features = [
        "raw_private_key_permit",
        "std",
        "alloc",
    ],
    deps = ["@crate_index//:tinyvec"],
)

rust_library(
    name = "crypto_provider_default",
    srcs = glob(["nearby/crypto/crypto_provider_default/src/**/*.rs"]),
    crate_features = [
        "rustcrypto",
        "std",
    ],
    deps = [
        ":crypto_provider",
        ":crypto_provider_rustcrypto",
        "@crate_index//:cfg-if",
    ],
)

rust_library(
    name = "crypto_provider_rustcrypto",
    srcs = glob(["nearby/crypto/crypto_provider_rustcrypto/src/**/*.rs"]),
    crate_features = [
        "std",
        "alloc",
    ],
    deps = [
        ":crypto_provider",
        "@crate_index//:aead",
        "@crate_index//:aes",
        "@crate_index//:aes-gcm",
        "@crate_index//:aes-gcm-siv",
        "@crate_index//:cbc",
        "@crate_index//:cfg-if",
        "@crate_index//:ctr",
        "@crate_index//:ed25519-dalek",
        "@crate_index//:hkdf",
        "@crate_index//:hmac",
        "@crate_index//:p256",
        "@crate_index//:rand",
        "@crate_index//:rand_chacha",
        "@crate_index//:rand_core",
        "@crate_index//:sec1",
        "@crate_index//:sha2",
        "@crate_index//:subtle",
        "@crate_index//:x25519-dalek",
    ],
)

rust_library(
    name = "ldt_tbc",
    srcs = glob(["nearby/presence/ldt_tbc/src/**/*.rs"]),
    deps = [":crypto_provider"],
)

rust_library(
    name = "ldt",
    srcs = glob(["nearby/presence/ldt/src/**/*.rs"]),
    deps = [
        ":crypto_provider",
        ":ldt_tbc",
    ],
)

rust_library(
    name = "xts_aes",
    srcs = glob(["nearby/presence/xts_aes/src/**/*.rs"]),
    deps = [
        ":array_ref",
        ":crypto_provider",
        ":ldt_tbc",
    ],
)

rust_library(
    name = "array_view",
    srcs = glob(["nearby/presence/array_view/src/**/*.rs"]),
)

rust_library(
    name = "array_ref",
    srcs = glob(["nearby/presence/array_ref/src/**/*.rs"]),
)

rust_library(
    name = "sink",
    srcs = glob(["nearby/presence/sink/src/**/*.rs"]),
    deps = ["@crate_index//:tinyvec"],
)
