"""
nox configuration file.
"""

import glob
import sys
from pathlib import Path

import nox

DIR = Path(__file__).parent.resolve()


@nox.session(venv_backend="none")
def pre_commit(session: nox.Session) -> None:
    """
    Run pre-commit
    """
    if "pre_commit" in sys.argv:
        session.run("pre-commit", "run", "--all-files")


@nox.session(venv_backend="none")
def dev(session: nox.Session) -> None:
    """
    Prepare a .venv folder.
    """

    library_output_dir = DIR / "src" / "myproj" / "simulation" / "_csrc"
    print(sys.path)
    session.run("which", "pip")

    session.run(
        "pip",
        "install",
        "--no-build-isolation",
        "--check-build-dependencies",
        "-ve",
        ".",
        f"-Ccmake.define.Python_ROOT_DIR={sys.exec_prefix}",
        "-Ccmake.define.CMAKE_EXPORT_COMPILE_COMMANDS=1",
        f"-Ccmake.define.CMAKE_LIBRARY_OUTPUT_DIRECTORY={library_output_dir}",
        "-Cbuild-dir=build",
    )


@nox.session(reuse_venv=True)
def cpp_lint_slow(session: nox.Session) -> None:
    if "cpp_lint_slow" in sys.argv:
        cpp_files = glob.glob("**/*.cc", recursive=True)
        session.run("clang-tidy", "-p", "build", *cpp_files)


@nox.session(reuse_venv=True)
def rr_run(session: nox.Session) -> None:
    """
    Run sp-repo-review.
    """

    session.install("sp-repo-review[cli]")
    session.run("repo-review", ".")


@nox.session
def rr_pylint(session: nox.Session) -> None:
    """
    Run PyLint.
    """
    # This needs to be installed into the package environment, and is slower
    # than a pre-commit check
    session.install("-e.")
    session.install("pylint>=3.2")
    session.run("pylint", "myproj.simulation", *session.posargs)