# Copyright 2024 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("@pigweed//pw_build:pigweed.bzl", "pw_cc_test")
load(
    "@pigweed//pw_protobuf_compiler:pw_proto_library.bzl",
    "nanopb_proto_library",
    "nanopb_rpc_proto_library",
)
load("@rules_python//python:proto.bzl", "py_proto_library")

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

cc_library(
    name = "blinky",
    srcs = ["blinky.cc"],
    hdrs = ["blinky.h"],
    implementation_deps = [
        "@pigweed//pw_log",
        "@pigweed//pw_preprocessor",
    ],
    deps = [
        "//modules/led:monochrome_led",
        "//modules/worker",
        "//system",
        "@pigweed//pw_async2:coro",
        "@pigweed//pw_async2:coro_or_else_task",
        "@pigweed//pw_async2:dispatcher",
        "@pigweed//pw_async2:time_provider",
        "@pigweed//pw_chrono:system_clock",
        "@pigweed//pw_function",
        "@pigweed//pw_sync:interrupt_spin_lock",
        "@pigweed//pw_sync:lock_annotations",
        "@pigweed//pw_system:async",
    ],
)

pw_cc_test(
    name = "blinky_test",
    srcs = ["blinky_test.cc"],
    deps = [
        ":blinky",
        "//modules/led:monochrome_led_fake",
        "//modules/led:polychrome_led_fake",
        "@pigweed//pw_allocator:testing",
        "@pigweed//pw_async2:dispatcher",
        "@pigweed//pw_async2:simulated_time_provider",
        "@pigweed//pw_unit_test",
    ],
)

cc_library(
    name = "service",
    srcs = ["service.cc"],
    hdrs = ["service.h"],
    deps = [
        ":blinky",
        ":nanopb_rpc",
        "@pigweed//pw_allocator:allocator",
        "@pigweed//pw_assert:check",
        "@pigweed//pw_async2:dispatcher",
    ],
)

proto_library(
    name = "proto",
    srcs = ["blinky.proto"],
    import_prefix = "blinky_pb",
    strip_import_prefix = "/modules/blinky",
    deps = [
        "@pigweed//pw_protobuf:common_proto",
    ],
)

nanopb_proto_library(
    name = "nanopb",
    deps = [":proto"],
)

nanopb_rpc_proto_library(
    name = "nanopb_rpc",
    nanopb_proto_library_deps = [":nanopb"],
    deps = [":proto"],
)

py_proto_library(
    name = "py_pb2",
    deps = [":proto"],
)
