# Copyright 2021 The Pigweed Authors
#
# 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
#
#     https://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(
    "//pw_env_setup/bazel/cipd_setup/internal:cipd_internal.bzl",
    _cipd_client_impl = "cipd_client_impl",
    _cipd_repository_impl = "cipd_repository_impl",
)

_cipd_client_repository = repository_rule(
    _cipd_client_impl,
    attrs = {
        "_cipd_version_file": attr.label(default = "@pigweed//pw_env_setup:py/pw_env_setup/cipd_setup/.cipd_version"),
        "_cipd_digest_file": attr.label(default = "@pigweed//pw_env_setup:py/pw_env_setup/cipd_setup/.cipd_version.digests"),
    },
    doc = """
Fetches the cipd client.

This rule should not be used directly and instead should be called via
the cipd_client_repository macro.
""",
)

def cipd_client_repository():
    """Fetches the cipd client.

    Fetches the cipd client to the prescribed remote repository target
    prefix 'cipd_client'. This rule should be called before a
    cipd_repository rule is instantiated.
    """
    _cipd_client_repository(
        name = "cipd_client",
    )

cipd_repository = repository_rule(
    _cipd_repository_impl,
    attrs = {
        "_cipd_client": attr.label(default = "@cipd_client//:cipd"),
        "path": attr.string(),
        "tag": attr.string(),
    },
    doc = """
Downloads a singular CIPD dependency to the root of a remote repository.

Example:

    load(
        "//pw_env_setup/bazel/cipd_setup:cipd_rules.bzl",
        "cipd_client_repository",
        "cipd_repository",
    )

    # Must be called before cipd_repository
    cipd_client_repository()

    cipd_repository(
        name = "bloaty",
        path = "pigweed/third_party/bloaty-embedded/${os=linux,mac}-${arch=amd64}",
        tag = "git_revision:2d87d204057b419f5290f8d38b61b9c2c5b4fb52-2",
    )
""",
)
