"""
This module holds the definitions of the containers that are built.
"""

load("@bazel_skylib//lib:paths.bzl", "paths")
load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")

def containers():
    return [
        {
            "identifier": "joinService",
            "image_name": "join-service",
            "name": "joinservice",
            "oci": "//joinservice/cmd:joinservice",
            "repotag_file": "//bazel/release:joinservice_tag.txt",
            "used_by": ["helm"],
        },
        {
            "identifier": "keyService",
            "image_name": "key-service",
            "name": "keyservice",
            "oci": "//keyservice/cmd:keyservice",
            "repotag_file": "//bazel/release:keyservice_tag.txt",
            "used_by": ["helm"],
        },
        {
            "identifier": "verificationService",
            "image_name": "verification-service",
            "name": "verificationservice",
            "oci": "//verify/cmd:verificationservice",
            "repotag_file": "//bazel/release:verificationservice_tag.txt",
            "used_by": ["helm"],
        },
        {
            "identifier": "constellationNodeOperator",
            "image_name": "node-operator",
            "name": "nodeoperator",
            "oci": "//operators/constellation-node-operator:node_operator",
            "repotag_file": "//bazel/release:nodeoperator_tag.txt",
            "used_by": ["helm"],
        },
        {
            "identifier": "qemuMetadata",
            "image_name": "qemu-metadata-api",
            "name": "qemumetadata",
            "oci": "//hack/qemu-metadata-api:qemumetadata",
            "repotag_file": "//bazel/release:qemumetadata_tag.txt",
            "used_by": ["config"],
        },
        {
            "identifier": "libvirt",
            "image_name": "libvirt",
            "name": "libvirt",
            "oci": "@libvirtd_base//:libvirtd_base",
            "repotag_file": "//bazel/release:libvirt_tag.txt",
            "used_by": ["config"],
        },
        {
            "identifier": "s3proxy",
            "image_name": "s3proxy",
            "name": "s3proxy",
            "oci": "//s3proxy/cmd:s3proxy",
            "repotag_file": "//bazel/release:s3proxy_tag.txt",
            "used_by": ["config"],
        },
        {
            "identifier": "vpn",
            "image_name": "vpn",
            "name": "vpn",
            "oci": "//nix/container/vpn",
            "repotag_file": "//bazel/release:vpn_tag.txt",
            "used_by": ["config"],
        },
    ]

def helm_containers():
    return [container for container in containers() if "helm" in container["used_by"]]

def config_containers():
    return [container for container in containers() if "config" in container["used_by"]]

def _container_reponame_impl(ctx):
    container_prefix = ctx.attr._prefix[BuildSettingInfo].value
    if container_prefix == None:
        fail("container_prefix is not set")

    full_container_tag = paths.join(container_prefix, ctx.attr.container_name)

    output = ctx.actions.declare_file(ctx.attr.container_name + "_container_repotag")
    ctx.actions.write(output = output, content = full_container_tag)
    return [DefaultInfo(files = depset([output]))]

container_reponame = rule(
    implementation = _container_reponame_impl,
    attrs = {
        "container_name": attr.string(),
        "_prefix": attr.label(default = Label("//bazel/settings:container_prefix")),
    },
)