# Wild Dragon MAM — Worker Node Stack
# ─────────────────────────────────────
# Deploy on any machine you want to join the cluster as a worker.
# The primary stack (mam-api, db, redis) continues running on TrueNAS.
#
# Required env vars (set in .env.worker or export before running):
#   MAM_API_URL   URL of the primary MAM API  e.g. http://10.0.0.25:47432
#   NODE_TOKEN    Bearer token from the primary's Tokens page
#   NODE_IP       Host LAN IP to report (set by onboard-node.sh)
#
# Optional hardware overrides (if Docker can't see /dev directly):
#   GPU_COUNT     Number of NVIDIA GPUs on this node  (default: auto-detect from /dev/nvidia*)
#   BMD_COUNT     Number of Blackmagic DeckLink cards (default: auto-detect from /dev/blackmagic/)
#   BMD_MODEL     Marketed card name (e.g. "DeckLink Duo 2") — drives the port-diagram UI
#
# Optional env vars (needed only if starting the worker or capture profiles):
#   REDIS_URL, DATABASE_URL, S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY, S3_SECRET_KEY
#   BMD_DEVICE_0  DeckLink device path (default: /dev/blackmagic/dv0)
#                 (DeckLink IO / Quad cards expose /dev/blackmagic/io* instead — set BMD_DEVICE_PREFIX=io)
#   BMD_DEVICE_1  DeckLink device path (default: /dev/blackmagic/dv1)
#   BMD_DEVICE_PREFIX  Naming prefix for synthesized BMD_COUNT-based devices (default: dv). Use 'io' for IO/Quad.
#   LIVE_DIR      Host path for HLS live segments (default: /mnt/NVME/MAM/wild-dragon-live)
#
# Profiles:
#   (default)           node-agent only — cluster visibility + hardware heartbeat
#   --profile worker    + CPU/GPU job worker (proxy generation, transcoding)
#   --profile capture   + SDI capture service (requires Blackmagic DeckLink card)
#
# To enable GPU transcoding, also apply docker-compose.gpu.yml:
#   docker compose -f docker-compose.worker.yml -f docker-compose.gpu.yml --profile worker up -d
#
# NOTE: The node-agent mounts /var/run/docker.sock to spawn on-demand SDI
# capture sidecars when the primary mam-api routes a recorder to this node.
# Build the capture image before first use:
#   docker compose -f docker-compose.worker.yml build capture

services:

  # node-agent runs in host network mode so it can see the real host
  # interfaces, GPU devices and DeckLink cards without bridging tricks.
  # The reported IP / hostname will be the host's, not the container's.
  node-agent:
    build: ./services/node-agent
    restart: unless-stopped
    network_mode: host
    environment:
      MAM_API_URL:   ${MAM_API_URL}
      NODE_TOKEN:    ${NODE_TOKEN:-}
      NODE_ROLE:     ${NODE_ROLE:-worker}
      NODE_IP:       ${NODE_IP:-}
      AGENT_PORT:    ${AGENT_PORT:-7436}
      HEARTBEAT_MS:  ${HEARTBEAT_MS:-30000}
      GPU_COUNT:           ${GPU_COUNT:--1}
      BMD_COUNT:           ${BMD_COUNT:--1}
      BMD_MODEL:           ${BMD_MODEL:-}
      BMD_DEVICE_PREFIX:   ${BMD_DEVICE_PREFIX:-dv}
      LIVE_DIR:      ${LIVE_DIR:-/mnt/NVME/MAM/wild-dragon-live}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /dev:/dev:ro
    devices:
      - /dev/blackmagic:/dev/blackmagic

  worker:
    build: ./services/worker
    profiles: [worker]
    restart: unless-stopped
    environment:
      REDIS_URL:      ${REDIS_URL}
      DATABASE_URL:   ${DATABASE_URL}
      S3_ENDPOINT:    ${S3_ENDPOINT}
      S3_BUCKET:      ${S3_BUCKET}
      S3_ACCESS_KEY:  ${S3_ACCESS_KEY}
      S3_SECRET_KEY:  ${S3_SECRET_KEY}
      S3_REGION:      ${S3_REGION:-us-east-1}
      NVENC_ENABLED:  ${NVENC_ENABLED:-false}
    networks:
      - wild-dragon-worker

  # SDI capture service — only start on nodes with Blackmagic DeckLink cards
  # Set BMD_DEVICE_0 in .env.worker to the actual device path, e.g. /dev/blackmagic/dv0
  capture:
    build: ./services/capture
    profiles: [capture]
    restart: unless-stopped
    environment:
      REDIS_URL:     ${REDIS_URL}
      DATABASE_URL:  ${DATABASE_URL}
      S3_ENDPOINT:   ${S3_ENDPOINT}
      S3_BUCKET:     ${S3_BUCKET}
      S3_ACCESS_KEY: ${S3_ACCESS_KEY}
      S3_SECRET_KEY: ${S3_SECRET_KEY}
      CAPTURE_PORT:  3001
    devices:
      - ${BMD_DEVICE_0:-/dev/blackmagic/dv0}:/dev/blackmagic/dv0
      - ${BMD_DEVICE_1:-/dev/blackmagic/dv1}:/dev/blackmagic/dv1
    ports:
      - "${CAPTURE_PORT:-7437}:3001"
    networks:
      - wild-dragon-worker

networks:
  wild-dragon-worker:
    driver: bridge
