# 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",
    "pw_proto_filegroup",
)
load("@rules_python//python:proto.bzl", "py_proto_library")

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

cc_library(
    name = "state_manager",
    srcs = ["state_manager.cc"],
    hdrs = ["state_manager.h"],
    implementation_deps = [
        "@pigweed//pw_assert:check",
        "@pigweed//pw_chrono:system_clock",
        "@pigweed//pw_log",
        "@pigweed//pw_string:format",
    ],
    deps = [
        ":common_base_union",
        "//modules/air_sensor",
        "//modules/edge_detector:hysteresis_edge_detector",
        "//modules/led:polychrome_led",
        "//modules/morse_code:encoder",
        "//modules/pubsub:events",
        "//modules/worker",
        "@pigweed//pw_assert",
        "@pigweed//pw_string:string",
    ],
)

cc_library(
    name = "common_base_union",
    hdrs = ["common_base_union.h"],
    visibility = ["//visibility:private"],
)

cc_library(
    name = "service",
    srcs = ["service.cc"],
    hdrs = ["service.h"],
    deps = [
        ":nanopb_rpc",
        "//modules/pubsub:events",
        "@pigweed//pw_string",
        "@pigweed//pw_sync:interrupt_spin_lock",
        "@pigweed//pw_sync:lock_annotations",
    ],
)

pw_proto_filegroup(
    name = "proto_and_options",
    srcs = ["state_manager.proto"],
    options_files = ["state_manager.options"],
)

proto_library(
    name = "proto",
    srcs = [":proto_and_options"],
    strip_import_prefix = "/modules/state_manager",
    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"],
)

pw_cc_test(
    name = "state_manager_test",
    srcs = ["state_manager_test.cc"],
    deps = [
        ":state_manager",
        "//modules/led:polychrome_led_fake",
        "//modules/pubsub",
        "//modules/pubsub:events",
        "//modules/worker:test_worker",
        "@pigweed//pw_chrono:system_clock",
        "@pigweed//pw_sync:thread_notification",
    ],
)
