# Copyright 2020 The Pigweed Authors
#
# 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_python//python:proto.bzl", "py_proto_library")
load(
    "//pw_build:pigweed.bzl",
    "pw_cc_test",
    "pw_facade",
)
load("//pw_protobuf_compiler:pw_proto_library.bzl", "pw_proto_library")

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

licenses(["notice"])

# TODO: pwbug.dev/328679085 - Remove this alias once no-one uses it.
alias(
    name = "facade",
    actual = "pw_log.facade",
)

pw_facade(
    name = "pw_log",
    srcs = [
        "public/pw_log/tokenized_args.h",
    ],
    hdrs = [
        "public/pw_log/config.h",
        "public/pw_log/levels.h",
        "public/pw_log/log.h",
        "public/pw_log/options.h",
        "public/pw_log/short.h",
        "public/pw_log/shorter.h",
    ],
    backend = ":backend",
    includes = ["public"],
    deps = [
        ":config_override",
        "//pw_preprocessor",
    ],
)

cc_library(
    name = "rate_limited",
    srcs = [
        "rate_limited.cc",
    ],
    hdrs = [
        "public/pw_log/rate_limited.h",
    ],
    includes = ["public"],
    deps = [
        ":config_override",
        ":pw_log",
        "//pw_chrono:system_clock",
    ],
)

label_flag(
    name = "config_override",
    build_setting_default = "//pw_build:default_module_config",
)

label_flag(
    name = "backend",
    build_setting_default = ":backend_multiplexer",
    # For internal tooling: go/build-cleaner/troubleshooting-faq#keep-dep
    tags = ["keep_dep"],
)

label_flag(
    name = "backend_impl",
    build_setting_default = "//pw_log_basic:impl",
    # For internal tooling: go/build-cleaner/troubleshooting-faq#keep-dep
    tags = ["keep_dep"],
)

cc_library(
    name = "glog_adapter",
    hdrs = [
        "public/pw_log/glog_adapter.h",
        "public/pw_log/glog_adapter_config.h",
        "public/pw_log/internal/glog_adapter.h",
    ],
    includes = ["public"],
    deps = [
        ":glog_adapter_config_override",
        "//pw_assert",
        "//pw_log",
        "//pw_preprocessor",
        "//pw_string",
    ],
)

label_flag(
    name = "glog_adapter_config_override",
    build_setting_default = "//pw_build:default_module_config",
)

cc_library(
    name = "proto_utils",
    srcs = [
        "proto_utils.cc",
    ],
    hdrs = [
        "public/pw_log/proto_utils.h",
    ],
    deps = [
        ":log_proto_cc.pwpb",
        ":pw_log.facade",
        "//pw_bytes",
        "//pw_log_tokenized:headers",
        "//pw_protobuf",
        "//pw_result",
    ],
)

proto_library(
    name = "log_proto",
    srcs = [
        "log.proto",
    ],
    import_prefix = "pw_log/proto",
    strip_import_prefix = "/pw_log",
    deps = [
        "//pw_protobuf:common_proto",
        "//pw_tokenizer:tokenizer_proto",
    ],
)

py_proto_library(
    name = "log_proto_py_pb2",
    deps = [":log_proto"],
)

java_lite_proto_library(
    name = "log_java_proto_lite",
    deps = [":log_proto"],
)

pw_proto_library(
    name = "log_proto_cc",
    deps = [":log_proto"],
)

cc_library(
    name = "backend_multiplexer",
    visibility = ["@pigweed//targets:__pkg__"],
    deps = ["//pw_log_basic"],
)

pw_cc_test(
    name = "test",
    srcs = [
        "basic_log_test.cc",
        "basic_log_test_plain_c.c",
    ],
    deps = [
        ":pw_log",
        ":pw_log.facade",
        ":rate_limited",
        "//pw_preprocessor",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "glog_adapter_test",
    srcs = [
        "glog_adapter_test.cc",
    ],
    deps = [
        ":glog_adapter",
        "//pw_unit_test",
    ],
)

pw_cc_test(
    name = "proto_utils_test",
    srcs = [
        "proto_utils_test.cc",
    ],
    deps = [
        ":log_proto_cc.pwpb",
        ":proto_utils",
        ":pw_log.facade",
        "//pw_containers",
        "//pw_preprocessor",
        "//pw_protobuf",
        "//pw_protobuf:bytes_utils",
        "//pw_unit_test",
    ],
)
