# Copyright 2018 The Bazel Authors. All rights reserved.
#
# 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
#
#    http://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.
"""Rules for importing external Android Archives (AARs).

Usage:

    # In WORKSPACE
    load("@bazel_tools//tools/build_defs/repo:android.bzl", "aar_import_external", "aar_maven_import_external")

    # Specify the URL directly:
    aar_import_external(
        name = "com_android_support_preference_v14_25_1_0",                              # required
        licenses = ["notice"],                                                           # required
        aar_urls = [                                                                     # required
            "https://dl.google.com/dl/android/maven2/com/android/support/preference-v14/25.1.0/preference-v14-25.1.0.aar"
        ],
        aar_sha256 = "442473fe5c395ebef26c14eb01d17ceda33ad207a4cc23a32a2ad95b87edfabb", # optional or empty string
        deps = [                                                                         # optional or empty list
            "@com_android_support_recyclerview_v7_25_1_0//aar",
            "@com_android_support_appcompat_v7_25_1_0//aar",
            "@com_android_support_preference_v7_25_1_0//aar",
            "@com_android_support_support_v4_25_1_0//aar",
        ],
    )

    # Or, specify the artifact coordinate:
    aar_maven_import_external(
        name = "com_android_support_preference_v14_25_1_0",                         # required
        artifact = "com.android.support.test:preference-v14:25.1.0",                # required
        sha256 = "442473fe5c395ebef26c14eb01d17ceda33ad207a4cc23a32a2ad95b87edfabb" # optional or empty string
        licenses = ["notice"],                                                      # required
        server_urls = ["https://maven.google.com"],                                 # required
        deps = [                                                                    # optional or empty list
            "@com_android_support_recyclerview_v7_25_1_0//aar",
            "@com_android_support_appcompat_v7_25_1_0//aar",
            "@com_android_support_preference_v7_25_1_0//aar",
            "@com_android_support_support_v4_25_1_0//aar",
        ],
    )

    # In BUILD.bazel
    android_library(
        name = "foo",
        srcs = [...],
        deps = [
            "@com_android_support_preference_v14_25_1_0//aar",
        ],
    )
"""

load(":jvm.bzl", "convert_artifact_coordinate_to_urls", "jvm_import_external")

def aar_import_external(aar_sha256, aar_urls, **kwargs):
    jvm_import_external(
        rule_name = "aar_import",
        rule_metadata = {
            "extension": "aar",
            "import_attr": "aar = %s",
        },
        artifact_sha256 = aar_sha256,
        artifact_urls = aar_urls,
        **kwargs
    )

def aar_maven_import_external(artifact, server_urls, aar_sha256 = "", **kwargs):
    aar_import_external(
        aar_sha256 = aar_sha256,
        aar_urls = convert_artifact_coordinate_to_urls(
            artifact,
            server_urls,
            "aar",
        ),
        **kwargs
    )
