"""A module defining dependencies of the `cargo-bazel` Rust target"""

load("@rules_rust//rust:defs.bzl", "rust_common")
load("//crate_universe:deps_bootstrap.bzl", "cargo_bazel_bootstrap")
load("//crate_universe/3rdparty:third_party_deps.bzl", "third_party_deps")
load("//crate_universe/3rdparty/crates:crates.bzl", _vendor_crate_repositories = "crate_repositories")
load("//crate_universe/private:crate.bzl", "crate")
load("//crate_universe/private:crates_repository.bzl", "crates_repository")
load("//crate_universe/private:crates_vendor.bzl", "crates_vendor")
load("//crate_universe/private:vendor_utils.bzl", "crates_vendor_deps")
load("//crate_universe/tools/cross_installer:cross_installer_deps.bzl", "cross_installer_deps")

USE_CRATES_REPOSITORY = False

# Short for 'crate universe index'. Keep this short to reduce the risk to
# bump into absolute path length issues on Windows. See:
# https://github.com/bazelbuild/rules_rust/issues/1120
_REPOSITORY_NAME = "cui"

_ANNOTATIONS = {
    "libgit2-sys": [crate.annotation(
        gen_build_script = False,
        deps = ["@libgit2"],
    )],
    "libz-sys": [crate.annotation(
        gen_build_script = False,
        deps = ["@zlib"],
    )],
}

_MANIFESTS = [
    "@rules_rust//crate_universe:Cargo.toml",
    "@rules_rust//crate_universe/tools/cross_installer:Cargo.toml",
    "@rules_rust//crate_universe/tools/urls_generator:Cargo.toml",
]

def crate_universe_dependencies(rust_version = rust_common.default_version, bootstrap = False):
    """Define dependencies of the `cargo-bazel` Rust target

    Args:
        rust_version (str, optional): The version of rust to use when generating dependencies.
        bootstrap (bool, optional): If true, a `cargo_bootstrap_repository` target will be generated.
    """
    third_party_deps()

    cargo_bazel_bootstrap(rust_version = rust_version)

    if USE_CRATES_REPOSITORY:
        crates_repository(
            name = _REPOSITORY_NAME,
            annotations = _ANNOTATIONS,
            generator = "@cargo_bazel_bootstrap//:cargo-bazel" if bootstrap else None,
            lockfile = "@rules_rust//crate_universe/3rdparty:cargo-bazel-lock.json",
            cargo_lockfile = "@rules_rust//crate_universe/3rdparty:Cargo.Bazel.lock",
            manifests = _MANIFESTS,
            rust_version = rust_version,
        )

    else:
        _vendor_crate_repositories()

    crates_vendor_deps()
    cross_installer_deps()

def crate_deps_target(name = "crates_vendor", vendor_path = "crates"):
    crates_vendor(
        name = name,
        repository_name = _REPOSITORY_NAME,
        annotations = _ANNOTATIONS,
        manifests = _MANIFESTS,
        vendor_path = vendor_path,
        cargo_lockfile = "@rules_rust//crate_universe/3rdparty:Cargo.Bazel.lock",
        mode = "remote",
        tags = ["manual"],
    )
