load("ext://namespace", "namespace_create")
load("ext://helm_resource", "helm_resource", "helm_repo")

namespace_create("audio-stream")

# --- K8s manifests ---
k8s_yaml([
    "kubernetes/audio-stream-flink-compute.yaml",
    "kubernetes/audio-stream-web.yaml",
    "kubernetes/grpc-server.yaml",
    "kubernetes/livekit-config.yaml",
    "kubernetes/livekit.yaml",
    "kubernetes/pulsar-livekit-bridge.yaml",
    "kubernetes/pulsar/topic-initialize.yaml",
])

# Dynamically inject absolute path for hostPath
publisher_yaml = str(read_file("kubernetes/audio-stream-publisher.yaml")).replace(
    "DATA_PATH_PLACEHOLDER",
    str(local("pwd")).strip() + "/audio-stream-publisher/data",
)
k8s_yaml(blob(publisher_yaml))

transcriber_yaml = str(read_file("kubernetes/audio-stream-transcriber.yaml")).replace(
    "MODELS_PATH_PLACEHOLDER",
    str(local("pwd")).strip() + "/audio-stream-transcriber/models",
)
k8s_yaml(blob(transcriber_yaml))

# --- Helm charts ---
helm_resource(
    "flink-kubernetes-operator",
    "../../../../flink-kubernetes-operator/helm/flink-kubernetes-operator",
    namespace="audio-stream",
    flags=["--values=kubernetes/flink-kubernetes-operator/helm-chart/values.yaml"],
    labels=["flink"],
)

helm_repo("pulsar-repo", "https://pulsar.apache.org/charts")
helm_resource(
    "pulsar",
    "pulsar-repo/pulsar",
    namespace="audio-stream",
    flags=["--values=kubernetes/pulsar/helm-chart/values.yaml"],
    labels=["pulsar"],
    resource_deps=["pulsar-repo"],
)

helm_repo("valkey-repo", "https://valkey.io/valkey-helm/")
helm_resource(
    "livekit-valkey",
    "valkey-repo/valkey",
    namespace="audio-stream",
    flags=["--values=kubernetes/livekit-valkey/helm-chart/values.yaml"],
    labels=["livekit"],
    resource_deps=["valkey-repo"],
)

# --- Docker builds ---
docker_build(
    "audio-stream-publisher",
    context=".",
    dockerfile="audio-stream-publisher/Dockerfile",
)

docker_build(
    "grpc-server",
    context=".",
    dockerfile="grpc-server/Dockerfile",
)

docker_build(
    "pulsar-livekit-bridge",
    context=".",
    dockerfile="pulsar-livekit-bridge/Dockerfile",
)

docker_build(
    "audio-stream-transcriber",
    context=".",
    dockerfile="audio-stream-transcriber/Dockerfile",
)

docker_build(
    "audio-stream-flink-compute",
    context="audio-stream-flink-compute",
    dockerfile="audio-stream-flink-compute/Dockerfile",
)
k8s_image_json_path("{.spec.image}", kind="FlinkDeployment", name="audio-stream-flink-compute", namespace="audio-stream")

docker_build(
    "audio-stream-web",
    context=".",
    dockerfile="audio-stream-web/Dockerfile",
)

# --- Resource grouping ---
k8s_resource("pulsar-topic-initialize", labels=["pulsar"], resource_deps=["pulsar"])
k8s_resource("livekit", labels=["livekit"], resource_deps=["livekit-valkey"], port_forwards=["7880:7880"])
k8s_resource("grpc-server", labels=["audio-stream"], resource_deps=["pulsar-topic-initialize"], port_forwards=["50051:50051"])
k8s_resource("audio-stream-publisher", labels=["audio-stream"], resource_deps=["grpc-server"])
k8s_resource("pulsar-livekit-bridge", labels=["audio-stream"], resource_deps=["livekit", "pulsar-topic-initialize"], port_forwards=["8080:8080"])
k8s_resource("audio-stream-transcriber", labels=["audio-stream"], resource_deps=["livekit", "pulsar-topic-initialize"])
k8s_resource("audio-stream-web", labels=["audio-stream"], resource_deps=["pulsar-livekit-bridge"], port_forwards=["8081:80"])
k8s_resource("audio-stream-flink-compute", labels=["flink"], resource_deps=["pulsar-topic-initialize", "flink-kubernetes-operator"])
