# 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("@build_bazel_rules_nodejs//:index.bzl", "js_library")
load("@npm//@bazel/concatjs:index.bzl", "karma_web_test")
load("@npm//@bazel/esbuild:index.bzl", "esbuild")
load("@npm//@bazel/typescript:index.bzl", "ts_library", "ts_project")
load("@npm//http-server:index.bzl", "http_server")
load("//pw_protobuf_compiler/ts:ts_proto_collection.bzl", "ts_proto_collection")
load("@rules_proto_grpc//js:defs.bzl", "js_proto_library")

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

js_proto_library(
    name = "rpc_protos_tspb",
    protos = [
        "//pw_rpc:echo_proto",
    ],
)

ts_proto_collection(
    name = "web_proto_collection",
    js_proto_library = "@//pw_web_ui:rpc_protos_tspb",
    proto_library = "@//pw_rpc:echo_proto",
)

ts_project(
    name = "lib",
    srcs = [
        "index.ts",
        "src/frontend/app.tsx",
        "src/frontend/index.tsx",
        "src/frontend/log.tsx",
        "src/frontend/serial_log.tsx",
        "src/transport/device_transport.ts",
        "src/transport/serial_mock.ts",
        "src/transport/web_serial_transport.ts",
        "types/serial.d.ts",
    ],
    declaration = True,
    source_map = True,
    deps = [
        ":web_proto_collection",
        "//pw_hdlc/ts:pw_hdlc",
        "//pw_rpc/ts:pw_rpc",
        "//pw_status/ts:pw_status",
        "//pw_tokenizer/ts:pw_tokenizer",
        "@npm//:node_modules",
    ],  # can't use fine-grained deps
)

js_library(
    name = "pw_web_ui",
    package_name = "@pigweed/pw_web_ui",
    srcs = ["package.json"],
    deps = [":lib"],
)

ts_library(
    name = "web_ui_test_lib",
    srcs = [
        "src/transport/web_serial_transport_test.ts",
    ],
    deps = [
        ":lib",
        "@npm//rxjs",
    ],
)

esbuild(
    name = "web_ui_test_bundle",
    entry_point = "src/transport/web_serial_transport_test.ts",
    deps = [":web_ui_test_lib"],
)

esbuild(
    name = "app_bundle",
    args = {
        "resolveExtensions": [
            ".mjs",
            ".js",
        ],
    },
    entry_point = "src/frontend/index.tsx",
    target = "es2021",
    deps = [":lib"],
)

karma_web_test(
    name = "web_ui_test",
    srcs = [
        ":web_ui_test_bundle",
    ],
)

http_server(
    name = "devserver",
    args = ["pw_web_ui/"],
    data = [
        "index.html",
        ":app_bundle",
    ],
)

# needed for embedding into downstream projects
filegroup(name = "pw_web_ui__contents")

filegroup(name = "pw_web_ui__files")

filegroup(name = "pw_web_ui__nested_node_modules")
