# Copyright 2023 The Bazel Authors. All rights reserved.
#
# 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
#
#    http://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_bazel_integration_test//bazel_integration_test:defs.bzl", "default_test_runner")
load("//python:py_binary.bzl", "py_binary")
load("//python:py_library.bzl", "py_library")
load("//tests/support:support.bzl", "NOT_WINDOWS")
load(":integration_test.bzl", "rules_python_integration_test")

licenses(["notice"])

_WORKSPACE_FLAGS = [
    "--noenable_bzlmod",
    "--enable_workspace",
]

default_test_runner(
    name = "workspace_test_runner",
    bazel_cmds = [
        "info {}".format(" ".join(_WORKSPACE_FLAGS)),
        "test {} //...".format(" ".join(_WORKSPACE_FLAGS)),
    ],
    visibility = ["//visibility:public"],
)

default_test_runner(
    name = "test_runner",
    visibility = ["//visibility:public"],
)

rules_python_integration_test(
    name = "bzlmod_lockfile_test",
    bazel_versions = ["9.1.0"],
    py_main = "bzlmod_lockfile_test.py",
)

test_suite(
    name = "subset",
    tags = ["manual"],
    tests = [
        "bzlmod_lockfile_test_bazel_9.1.0",
        "local_toolchains_test_bazel_self",
        "uv_lock_test_bazel_self",
        "validate_test_main_test_bazel_self",
    ],
)

rules_python_integration_test(
    name = "compile_pip_requirements_test",
)

rules_python_integration_test(
    name = "compile_pip_requirements_workspace_test",
    bzlmod = False,
    workspace_path = "compile_pip_requirements",
)

rules_python_integration_test(
    name = "local_toolchains_test",
    env = {
        "RULES_PYTHON_BZLMOD_DEBUG": "1",
    },
)

rules_python_integration_test(
    name = "local_toolchains_workspace_test",
    bzlmod = False,
    env = {
        "RULES_PYTHON_BZLMOD_DEBUG": "1",
    },
    workspace_path = "local_toolchains",
)

rules_python_integration_test(
    name = "pip_parse_test",
)

rules_python_integration_test(
    name = "pip_parse_isolated_test",
)

rules_python_integration_test(
    name = "pip_parse_workspace_test",
    bzlmod = False,
    workspace_path = "pip_parse",
)

rules_python_integration_test(
    name = "py_cc_toolchain_registered_test",
)

rules_python_integration_test(
    name = "py_cc_toolchain_registered_workspace_test",
    bzlmod = False,
    workspace_path = "py_cc_toolchain_registered",
)

rules_python_integration_test(
    name = "runtime_manifests_test",
)

rules_python_integration_test(
    name = "custom_commands_test",
    py_main = "custom_commands_test.py",
)

rules_python_integration_test(
    name = "toolchain_target_settings_test",
    py_main = "toolchain_target_settings_test.py",
)

rules_python_integration_test(
    name = "validate_test_main_test",
    py_main = "validate_test_main_test.py",
)

rules_python_integration_test(
    name = "unified_pypi_test",
    py_main = "unified_pypi_test.py",
)

rules_python_integration_test(
    name = "uv_lock_test",
    py_deps = [
        "@pypiserver//pypiserver",
        ":uv_lock_pypi_server_lib",
    ],
    py_main = "uv_lock_test.py",
)

rules_python_integration_test(
    name = "whl_library_test",
)

py_library(
    name = "runner_lib",
    srcs = ["runner.py"],
    imports = ["../../"],
)

py_library(
    name = "uv_lock_pypi_server_lib",
    srcs = ["uv_lock_pypi_server.py"],
    imports = ["../../"],
    # currently windows is not working due to
    # https://github.com/pypiserver/pypiserver/blob/main/pypiserver/config.py#L123
    #
    # class DEFAULTS:
    #     ....
    #     PACKAGE_DIRECTORIES = [pathlib.Path("~/packages").expanduser().resolve()]
    #     ....
    #
    # which is loaded through `__init__.py` even though it is not used and breaks because
    # in a Windows sandbox one cannot resolve the home directory.
    target_compatible_with = NOT_WINDOWS,
    deps = ["@pypiserver//pypiserver"],
)

py_binary(
    name = "uv_lock_pypi_server",
    srcs = ["uv_lock_pypi_server.py"],
    deps = [":uv_lock_pypi_server_lib"],
)
