load('ext://namespace', 'namespace_create')
load('ext://restart_process',  'docker_build_with_restart')
load('ext://secret', 'secret_create_generic')

cfg = config.parse()

local_resource(
  'namespace',
  'kubectl apply -f k8s/manifests/namespace.yaml',
  labels=['setup'],
)

# MySQL service
docker_build('teral/mysql:local', '..', dockerfile='./Dockerfile.mysql')
k8s_yaml('k8s/manifests/mysql.yaml')
k8s_resource('mysql', port_forwards='3306:3306', resource_deps=[], labels=['database'])

# ClickHouse service
docker_build('teral/clickhouse:local', '..', dockerfile='./Dockerfile.clickhouse')
k8s_yaml('k8s/manifests/clickhouse.yaml')
k8s_resource('clickhouse', port_forwards=['8123:8123','9000:9000'], resource_deps=[], labels=['database'])

# Prometheus Monitoring
##k8s_yaml('k8s/manifests/observability.yaml')
#k8s_resource(
#  'prometheus',
#  port_forwards='9090:9090',
#  resource_deps=['api'],
#  labels=['observability']
#)
#k8s_resource(
#  'otel-collector',
#  port_forwards='3000:3000',
#  labels=['observability']
#)

# Build Go binaries locally (auto-detect arch from minikube)
local_resource(
    'build-teral',
    'cd .. && CGO_ENABLED=0 GOOS=linux GOARCH=$(minikube ssh -- uname -m | sed "s/x86_64/amd64/" | sed "s/aarch64/arm64/" | tr -d "\\r") go build -o bin/teral .',
    deps=['../main.go', '../pkg', '../cmd', '../svc', '../gen'],
    labels=['build'],
)

# Single docker image for all Go services - k8s manifests use `args` to specify which service to run
docker_build_with_restart(
    'teral/go:latest',
    '..',
    dockerfile='./Dockerfile.tilt',
    entrypoint=['/teral'],
    only=['./bin'],
    live_update=[sync('./bin/teral', '/teral')]
)


k8s_yaml('k8s/manifests/api.yaml')
k8s_resource(
  'api',
  port_forwards='7070:7070',
  # TODO: re-add other deps
  resource_deps=['mysql', 'clickhouse', 'build-teral'],
  # resource_deps=['mysql', 'clickhouse', 'redis', 'build-teral'],
  labels=['teral'],
  auto_init=True,
  trigger_mode=TRIGGER_MODE_AUTO
)