"""
Toolchain setup boilerplate
"""

load("//:buildtools.bzl", "buildtools")

def _buildifier_toolchain(ctx):
    return [
        platform_common.ToolchainInfo(
            _tool = ctx.executable.tool,
            _runner = ctx.attr.runner,
        ),
    ]

prebuilt_toolchain = rule(
    _buildifier_toolchain,
    attrs = {
        "tool": attr.label(
            allow_single_file = True,
            mandatory = True,
            cfg = "exec",
            executable = True,
            doc = "Buildtools executable",
        ),
        "runner": attr.label(
            allow_single_file = True,
            mandatory = False,
            doc = "The templated runner script for the executable, if needed",
        ),
    },
    provides = [platform_common.ToolchainInfo],
)

def declare_toolchain(tool_name, tool, os, arch):  # buildifier: disable=unnamed-macro
    """Create the custom and native toolchain for a platform

    Args:
        tool_name: The tool the toolchain is being used for
        tool: The tool to use
        os: The OS the toolchain is compatible with
        arch: The arch the toolchain is compatible with
    """

    name = buildtools.create_unique_name(name = tool_name, platform = os, arch = arch)
    buildifier_runner = "@buildifier_prebuilt//:runner.bat.template" if os == "windows" else "@buildifier_prebuilt//:runner.bash.template"

    prebuilt_toolchain(
        name = name,
        tool = tool,
        runner = buildifier_runner if tool_name == "buildifier" else None,
    )

    if os == "darwin":
        os = "macos"
    if arch == "amd64":
        arch = "x86_64"

    native.toolchain(
        name = name + "_toolchain",
        toolchain_type = "@buildifier_prebuilt//{tool}:toolchain".format(
            tool = tool_name,
        ),
        exec_compatible_with = [
            "@platforms//os:{}".format(os),
            "@platforms//cpu:{}".format(arch),
        ],
        toolchain = name,
    )
