#!/usr/bin/env bash
# Generate docker-compose.resources.yml when optional CPU/memory limits are set.
# Compose rejects empty cpus/mem_limit interpolations, so limits only appear here
# when the env actually provides a value.
source "$(dirname "${BASH_SOURCE[0]}")/common.sh"

OUT="${RUN_DIR}/docker-compose.resources.yml"
mkdir -p "${RUN_DIR}"

pick() {
  # Prefer the service-specific value, then the global Docker default.
  local specific="$1" global="$2"
  if [ -n "${specific}" ]; then
    printf '%s' "${specific}"
  elif [ -n "${global}" ]; then
    printf '%s' "${global}"
  fi
}

emit_service() {
  local name="$1" mem="$2" cpu="$3"
  [ -n "${mem}" ] || [ -n "${cpu}" ] || return 0
  echo "  ${name}:"
  if [ -n "${mem}" ]; then
    echo "    mem_limit: ${mem}"
  fi
  if [ -n "${cpu}" ]; then
    echo "    cpus: ${cpu}"
  fi
}

frontend_mem="$(pick "${FRONTEND_MEMORY_LIMIT:-}" "${DOCKER_MEMORY_LIMIT:-}")"
frontend_cpu="$(pick "${FRONTEND_CPU_LIMIT:-}" "${DOCKER_CPU_LIMIT:-}")"
backend_mem="$(pick "${BACKEND_MEMORY_LIMIT:-}" "${DOCKER_MEMORY_LIMIT:-}")"
backend_cpu="$(pick "${BACKEND_CPU_LIMIT:-}" "${DOCKER_CPU_LIMIT:-}")"
postgres_mem="$(pick "${POSTGRES_MEMORY_LIMIT:-}" "${DOCKER_MEMORY_LIMIT:-}")"
postgres_cpu="$(pick "${POSTGRES_CPU_LIMIT:-}" "${DOCKER_CPU_LIMIT:-}")"
mysql_mem="$(pick "${MYSQL_MEMORY_LIMIT:-}" "${DOCKER_MEMORY_LIMIT:-}")"
mysql_cpu="$(pick "${MYSQL_CPU_LIMIT:-}" "${DOCKER_CPU_LIMIT:-}")"

if [ -z "${frontend_mem}${frontend_cpu}${backend_mem}${backend_cpu}${postgres_mem}${postgres_cpu}${mysql_mem}${mysql_cpu}" ]; then
  rm -f "${OUT}"
  exit 0
fi

{
  echo "# Generated by scripts/gen-resources.sh — do not edit."
  echo "services:"
  for svc in frontend-deps frontend-packages frontend-sync web admin landing \
    desktop mobile-deps mobile-packages mobile-client; do
    emit_service "${svc}" "${frontend_mem}" "${frontend_cpu}"
  done
  for svc in backend queue scheduler; do
    emit_service "${svc}" "${backend_mem}" "${backend_cpu}"
  done
  while IFS= read -r name; do
    emit_service "${name}" "${frontend_mem}" "${frontend_cpu}"
  done < <(extra_app_names)
  emit_service postgres "${postgres_mem}" "${postgres_cpu}"
  emit_service mysql "${mysql_mem}" "${mysql_cpu}"
} > "${OUT}"
