load("@rules_python//python:defs.bzl", "py_binary", "py_test")
load("@py_deps//:requirements.bzl", "requirement")

py_binary(
    name = "genhooks_gui",
    srcs = [
        "tools/genhooks_gui.py",
    ],
    imports = ["."],
    visibility = [":__subpackages__"],
    deps = [
        "//pylib/tools:hookslib",
        requirement("black"),
        "//pylib/anki/_vendor:stringcase",
    ],
)

py_binary(
    name = "extract_sass_colors",
    srcs = [
        "tools/extract_sass_colors.py",
    ],
    imports = ["."],
    visibility = [":__subpackages__"],
)

py_test(
    name = "pytest",
    srcs = glob(["tests/*.py"]) + ["bazelfixes.py"],
    imports = ["."],
    main = "tests/run_pytest.py",
    deps = [
        "//pylib/anki",
        "//qt/aqt:aqt_without_data",
        requirement("pytest"),
        requirement("mock"),
    ],
)

py_test(
    name = "mypy",
    srcs = [
        "tests/run_mypy.py",
    ],
    args = [
        "aqt",
        "$(location mypy.ini)",
        "$(location @pyqt6//:__init__.py)",
        "$(location //python/stubs:extendsitepkgs)",
    ],
    data = [
        "mypy.ini",
        "//python/stubs",
        "//python/stubs:extendsitepkgs",
        "@pyqt6//:__init__.py",
    ],
    env = {"EXTRA_SITE_PACKAGES": "$(location //python/stubs)"},
    main = "tests/run_mypy.py",
    deps = [
        "//pylib/anki",
        "//qt/aqt:aqt_without_data",
        "@pyqt6",
        requirement("mypy"),
    ],
)

py_test(
    name = "pylint",
    srcs = [
        "tests/run_pylint.py",
    ],
    args = [
        "aqt",
        "$(location .pylintrc)",
    ],
    data = [
        ".pylintrc",
    ],
    main = "tests/run_pylint.py",
    deps = [
        "//pylib/anki",
        "//qt/aqt:aqt_without_data",
        requirement("pylint"),
        "@pyqt6",
    ],
)

py_test(
    name = "format_check",
    srcs = glob(["**/*.py"]) + [
        "//qt/aqt:py_source_files",
    ],
    args = [
        "$(location .isort.cfg)",
    ],
    data = [".isort.cfg"],
    main = "tests/run_format.py",
    deps = [
        "//qt/aqt:aqt_without_data",
        requirement("black"),
        requirement("isort"),
    ],
)

py_binary(
    name = "format",
    srcs = [
        "tests/run_format.py",
    ],
    args = [
        "$(location .isort.cfg)",
        "fix",
    ],
    data = [".isort.cfg"],
    main = "tests/run_format.py",
    tags = ["manual"],
    deps = [
        requirement("black"),
        requirement("isort"),
    ],
)

py_binary(
    name = "runanki",
    srcs = [
        "bazelfixes.py",
        "runanki.py",
    ],
    imports = ["."],
    deps = [
        "//pylib/anki",
        "//qt/aqt:aqt_with_data",
        "@pyqt6",
    ],
)

py_binary(
    name = "runanki_qt515",
    srcs = [
        "bazelfixes.py",
        "runanki.py",
    ],
    imports = ["."],
    main = "runanki.py",
    tags = ["manual"],
    deps = [
        "//pylib/anki",
        "//qt/aqt:aqt_with_data",
        "@pyqt515",
    ],
)

py_binary(
    name = "runanki_qt514",
    srcs = [
        "bazelfixes.py",
        "runanki.py",
    ],
    imports = ["."],
    main = "runanki.py",
    tags = ["manual"],
    deps = [
        "//pylib/anki",
        "//qt/aqt:aqt_with_data",
        "@pyqt514",
    ],
)

py_binary(
    name = "dmypy",
    srcs = [
        "dmypy.py",
    ],
    data = [
        # ensure the binary's been built
        "//python:dmypy",
        "//python/stubs",
        "//python/stubs:extendsitepkgs",
    ],
    env = {"EXTRA_SITE_PACKAGES": "$(location //python/stubs)"},
    imports = ["."],
    tags = ["manual"],
    deps = [
        "//pylib/anki",
        "//qt/aqt:aqt_without_data",
    ],
)

py_binary(
    name = "profile",
    srcs = ["tools/profile.py"],
    tags = ["manual"],
    deps = [
        requirement("snakeviz"),
    ],
)
