load("@io_tweag_rules_nixpkgs//nixpkgs:repositories.bzl", "rules_nixpkgs_dependencies")
load("@io_tweag_rules_nixpkgs//nixpkgs:nixpkgs.bzl", "nixpkgs_git_repository", "nixpkgs_package")

def has_nix(ctx):
    return ctx.which("nix-build") != None

def _hscloud_gen_go_imports_impl(ctx):
    ctx.file("BUILD", "")

    imports_for_nix = """
load("@io_tweag_rules_nixpkgs//nixpkgs:toolchains/go.bzl", "nixpkgs_go_configure")

def hscloud_go_register_toolchains():
    nixpkgs_go_configure(repository = "@nixpkgs")
"""
    imports_for_non_nix = """
load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains")
def hscloud_go_register_toolchains():
    go_register_toolchains()
"""

    if has_nix(ctx):
        ctx.file("imports.bzl", imports_for_nix)
    else:
        ctx.file("imports.bzl", imports_for_non_nix)

# Generate repository containing either a call to go_register_toolchains() or
# nixpkgs_go_configure(), depending on nix presence.
hscloud_gen_go_imports = repository_rule(
    implementation = _hscloud_gen_go_imports_impl,
    attrs = dict(),
)

def _hscloud_gen_pip_imports_impl(ctx):
    ctx.file("BUILD", "")

    # For Nix, we have to both pass our interpreter to pip3_import, and also
    # register it as a toolchain.
    imports_for_nix = """
load("@rules_python//python:pip.bzl", "pip3_import")
def hscloud_pip3_import(name, requirements):
    pip3_import(
        name = name,
        requirements = requirements,
        python_interpreter_target = "@hscloud_nix_python3//:python3",
    )
    native.register_toolchains("//third_party/nix:py_toolchain")
"""
    imports_for_non_nix = """
load("@rules_python//python:pip.bzl", "pip3_import")
def hscloud_pip3_import(name, requirements):
    pip3_import(
        name = name,
        requirements = requirements,
    )
"""
    if has_nix(ctx):
        ctx.file("imports.bzl", imports_for_nix)
    else:
        ctx.file("imports.bzl", imports_for_non_nix)

# Generate repository containing a wrapped pip3_import that either uses the
# host Python interpreter or one from nixpkgs, depending on nix presence.
hscloud_gen_pip_imports = repository_rule(
    implementation = _hscloud_gen_pip_imports_impl,
    attrs = dict(),
)

def hscloud_setup_nix(revision, sha256):
    rules_nixpkgs_dependencies()
    nixpkgs_git_repository(
        name = "nixpkgs",
        revision = "1179840f9a88b8a548f4b11d1a03aa25a790c379",
        sha256 = "8b64041bfb9760de9e797c0a985a4830880c21732489f397e217d877edd9a990",
    )

    # Load python from nixpkgs. Python is a large source of non-hermiticity,
    # and loading it from nix vastly hermeticizes the build - well, at least to
    # also be dependent on this Nix store state. That's still better than just
    # grabbing whatever random system Python a user might have.
    nixpkgs_package(
        name = "hscloud_nix_python2",
        repositories = { "nixpkgs": "@nixpkgs//:default.nix" },
        nix_file = "//third_party/nix:python.nix",
        attribute_path = "python2",
        build_file_content = """
package(default_visibility = ["//visibility:public"])
exports_files(["python2"])
        """,
    )
    nixpkgs_package(
        name = "hscloud_nix_python3",
        repositories = { "nixpkgs": "@nixpkgs//:default.nix" },
        nix_file = "//third_party/nix:python.nix",
        attribute_path = "python3",
        build_file_content = """
package(default_visibility = ["//visibility:public"])
exports_files(["python3"])
        """,
    )

    # Generate a Go toolchain setup workspace rule.
    hscloud_gen_go_imports(
        name = "hscloud_go_toolchain",
    )
    hscloud_gen_pip_imports(
        name = "hscloud_pip_imports",
    )
