# Copyright 2021 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("//pw_build:python.bzl", "pw_py_binary", "pw_py_library", "pw_py_test")

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

licenses(["notice"])

pw_py_library(
    name = "py",
    srcs = [
        "pw_cli/__init__.py",
        "pw_cli/aliases.py",
        "pw_cli/allowed_caller.py",
        "pw_cli/argument_types.py",
        "pw_cli/arguments.py",
        "pw_cli/branding.py",
        "pw_cli/collect_files.py",
        "pw_cli/color.py",
        "pw_cli/decorators.py",
        "pw_cli/diff.py",
        "pw_cli/env.py",
        "pw_cli/envparse.py",
        "pw_cli/file_filter.py",
        "pw_cli/git_repo.py",
        "pw_cli/log.py",
        "pw_cli/pigweed_aliases.py",
        "pw_cli/plugins.py",
        "pw_cli/plural.py",
        "pw_cli/requires.py",
        "pw_cli/shell_completion/__init__.py",
        "pw_cli/shell_completion/fish/__init__.py",
        "pw_cli/shell_completion/zsh/__init__.py",
        "pw_cli/shell_completion/zsh/pw/__init__.py",
        "pw_cli/shell_completion/zsh/pw_build/__init__.py",
        "pw_cli/status_reporter.py",
        "pw_cli/tool_runner.py",
    ],
    imports = ["."],
)

pw_py_library(
    name = "interactive_prompts",
    srcs = ["pw_cli/interactive_prompts.py"],
    imports = ["."],
    deps = [
        ":py",
        "@pigweed_python_packages//prompt_toolkit",
    ],
)

pw_py_library(
    name = "process",
    srcs = ["pw_cli/process.py"],
    imports = ["."],
    deps = [
        ":py",
        "@pigweed_python_packages//psutil",
    ],
)

pw_py_library(
    name = "multitool",
    srcs = ["pw_cli/multitool.py"],
    imports = ["."],
    deps = [
        ":py",
        "//pw_cli_analytics/py:pw_cli_analytics",
    ],
)

pw_py_library(
    name = "pw_command_plugins",
    srcs = ["pw_cli/pw_command_plugins.py"],
    imports = ["."],
    deps = [
        ":py",
        "//pw_env_setup/py:pw_env_setup",
    ],
)

pw_py_library(
    name = "cli",
    srcs = ["pw_cli/__main__.py"],
    imports = ["."],
    deps = [
        ":multitool",
        ":pw_command_plugins",
        ":py",
    ],
)

# Maintain pw_cli for backwards compatibility.
pw_py_library(
    name = "pw_cli",
    deps = [
        ":interactive_prompts",
        ":multitool",
        ":process",
        ":pw_command_plugins",
        ":py",
    ],
)

pw_py_binary(
    name = "log",
    srcs = [
        "pw_cli/log.py",
    ],
    deps = [
        ":py",
    ],
)

pw_py_test(
    name = "argument_types_test",
    size = "small",
    srcs = [
        "argument_types_test.py",
    ],
    deps = [
        ":py",
    ],
)

pw_py_test(
    name = "collect_files_test",
    size = "small",
    srcs = [
        "collect_files_test.py",
    ],
    deps = [
        ":py",
        "@pigweed_python_packages//pyfakefs",
    ],
)

pw_py_test(
    name = "envparse_test",
    size = "small",
    srcs = [
        "envparse_test.py",
    ],
    deps = [
        ":py",
    ],
)

pw_py_test(
    name = "file_filter_test",
    size = "small",
    srcs = [
        "file_filter_test.py",
    ],
    deps = [
        ":py",
    ],
)

pw_py_test(
    name = "git_repo_test",
    size = "small",
    srcs = [
        "git_repo_test.py",
    ],
    deps = [
        ":py",
        "@pigweed_python_packages//pyfakefs",
    ],
)

pw_py_test(
    name = "plugins_test",
    size = "small",
    srcs = [
        "plugins_test.py",
    ],
    deps = [
        ":py",
    ],
)

pw_py_test(
    name = "plural_test",
    size = "small",
    srcs = [
        "plural_test.py",
    ],
    deps = [
        ":py",
    ],
)

pw_py_test(
    name = "tool_runner_test",
    size = "small",
    srcs = [
        "tool_runner_test.py",
    ],
    deps = [
        ":py",
    ],
)

pw_py_test(
    name = "decorators_test",
    srcs = ["decorators_test.py"],
    deps = [":py"],
)

pw_py_test(
    name = "process_integration_test",
    srcs = ["process_integration_test.py"],
    deps = [
        ":process",
        ":py",
    ],
)
