# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.


import re

from gecko_taskgraph.util.scriptworker import (
    generate_beetmover_artifact_map,
    generate_beetmover_upstream_artifacts,
)

_ARTIFACT_ID_PER_PLATFORM = {
    "android-aarch64-opt": "{package}-default-arm64-v8a",
    "android-arm-opt": "{package}-default-armeabi-v7a",
    "android-x86-opt": "{package}-default-x86",
    "android-x86_64-opt": "{package}-default-x86_64",
    "android-geckoview-fat-aar-opt": "{package}-default",
    "android-aarch64-shippable": "{package}{update_channel}-omni-arm64-v8a",
    "android-aarch64-shippable-lite": "{package}{update_channel}-arm64-v8a",
    "android-arm-shippable": "{package}{update_channel}-omni-armeabi-v7a",
    "android-arm-shippable-lite": "{package}{update_channel}-armeabi-v7a",
    "android-x86-shippable": "{package}{update_channel}-omni-x86",
    "android-x86-shippable-lite": "{package}{update_channel}-x86",
    "android-x86_64-shippable": "{package}{update_channel}-omni-x86_64",
    "android-x86_64-shippable-lite": "{package}{update_channel}-x86_64",
    "android-geckoview-fat-aar-shippable": "{package}{update_channel}-omni",
    "android-geckoview-fat-aar-shippable-lite": "{package}{update_channel}",
}


def get_geckoview_artifact_map(config, job):
    return generate_beetmover_artifact_map(
        config,
        job,
        **get_geckoview_template_vars(
            config,
            job["attributes"]["build_platform"],
            job["maven-package"],
            job["attributes"].get("update-channel"),
        ),
    )


def get_geckoview_upstream_artifacts(config, job, package, platform=""):
    if not platform:
        platform = job["attributes"]["build_platform"]
    upstream_artifacts = generate_beetmover_upstream_artifacts(
        config,
        job,
        platform="",
        **get_geckoview_template_vars(
            config, platform, package, job["attributes"].get("update-channel")
        ),
    )
    return [
        {key: value for key, value in upstream_artifact.items() if key != "locale"}
        for upstream_artifact in upstream_artifacts
    ]


def get_geckoview_template_vars(config, platform, package, update_channel):
    version_groups = re.match(r"(\d+).(\d+).*", config.params["version"])
    if version_groups:
        major_version, minor_version = version_groups.groups()

    return {
        "artifact_id": get_geckoview_artifact_id(
            config,
            platform,
            package,
            update_channel,
        ),
        "build_date": config.params["moz_build_date"],
        "major_version": major_version,
        "minor_version": minor_version,
    }


def get_geckoview_artifact_id(config, platform, package, update_channel=None):
    if update_channel == "release":
        update_channel = ""
    elif update_channel is not None:
        update_channel = f"-{update_channel}"
    else:
        # For shippable builds, mozharness defaults to using
        # "nightly-{project}" for the update channel.  For other builds, the
        # update channel is not set, but the value is not substituted.
        update_channel = "-nightly-{}".format(config.params["project"])
    return _ARTIFACT_ID_PER_PLATFORM[platform].format(
        update_channel=update_channel, package=package
    )
