# 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",
    ],
)

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"],
)
