# 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:defs.bzl", "py_binary")

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

licenses(["notice"])

filegroup(
    name = "pw_rpc_common_sources",
    srcs = [
        "pw_rpc/callback_client/__init__.py",
        "pw_rpc/callback_client/call.py",
        "pw_rpc/callback_client/errors.py",
        "pw_rpc/callback_client/impl.py",
        "pw_rpc/codegen.py",
        "pw_rpc/codegen_nanopb.py",
        "pw_rpc/codegen_raw.py",
        "pw_rpc/console_tools/__init__.py",
        "pw_rpc/console_tools/console.py",
        "pw_rpc/console_tools/functions.py",
        "pw_rpc/console_tools/watchdog.py",
        "pw_rpc/descriptors.py",
        "pw_rpc/ids.py",
        "pw_rpc/packets.py",
        "pw_rpc/plugin.py",
        "pw_rpc/plugin_nanopb.py",
        "pw_rpc/plugin_raw.py",
    ],
)

py_binary(
    name = "plugin_raw",
    srcs = [":pw_rpc_common_sources"],
    imports = ["."],
    main = "pw_rpc/plugin_raw.py",
    python_version = "PY3",
    deps = [
        "//pw_protobuf/py:plugin_library",
        "//pw_protobuf_compiler/py:pw_protobuf_compiler",
        "//pw_status/py:pw_status",
        "@com_google_protobuf//:protobuf_python",
    ],
)

py_binary(
    name = "plugin_nanopb",
    srcs = [":pw_rpc_common_sources"],
    imports = ["."],
    main = "pw_rpc/plugin_nanopb.py",
    python_version = "PY3",
    deps = [
        "//pw_protobuf/py:plugin_library",
        "//pw_protobuf_compiler/py:pw_protobuf_compiler",
        "//pw_status/py:pw_status",
        "@com_google_protobuf//:protobuf_python",
    ],
)

py_library(
    name = "pw_rpc",
    srcs = [
        "pw_rpc/__init__.py",
        "pw_rpc/client.py",
        ":pw_rpc_common_sources",
    ],
    # TODO(tonymd): Figure out the right way to handle generated protos
    # data = [
    #     # Copy packet_pb2.py
    #     #   From: //pw_rpc/internal/packet_pb2.py
    #     #   To:   //pw_rpc/py/pw_rpc/internal/packet_pb2.py
    #     ":copy_packet_pb2",
    # ],
    imports = ["."],
    deps = [
        "//pw_protobuf/py:pw_protobuf",
        "//pw_protobuf_compiler/py:pw_protobuf_compiler",
        "//pw_status/py:pw_status",
    ],
)

# TODO(tonymd): Figure out the right way to handle generated protos
# load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
# copy_file(
#     name = "copy_packet_pb2",
#     src = "//pw_rpc:internal_packet_proto_pb2",
#     out = "pw_rpc/internal/packet_pb2.py",
#     allow_symlink = True,
# )

# TODO(tonymd): Figure out the right way to handle generated protos
# py_test(
#     name = "client_test",
#     size = "small",
#     srcs = [
#         "tests/client_test.py",
#     ],
#     data = [
#         # Copy packet_pb2.py
#         #   From: //pw_rpc/internal/packet_pb2.py
#         #   To:   //pw_rpc/py/pw_rpc/internal/packet_pb2.py
#         ":copy_packet_pb2",
#     ],
#     deps = [
#         ":pw_rpc",
#         "//pw_rpc:internal_packet_proto_pb2",
#     ],
# )
