version: "3.9"

services:
  sensing-server:
    build:
      context: ..
      dockerfile: docker/Dockerfile.rust
    image: ruvnet/wifi-densepose:latest
    ports:
      - "3000:3000"   # REST API
      - "3001:3001"   # WebSocket
      - "5005:5005/udp"  # ESP32 UDP
    environment:
      - RUST_LOG=info
      # CSI_SOURCE controls the data source for the sensing server.
      # Options: auto (default) — probe for ESP32 UDP then fall back to simulation
      #          esp32          — receive real CSI frames from an ESP32 on UDP port 5005
      #          wifi           — use host Wi-Fi RSSI/scan data (Windows netsh)
      #          simulated      — generate synthetic CSI data (no hardware required)
      - CSI_SOURCE=${CSI_SOURCE:-auto}
    # command is passed as arguments to ENTRYPOINT (/bin/sh -c), so $CSI_SOURCE is expanded by the shell.
    command: ["/app/sensing-server --source ${CSI_SOURCE:-auto} --tick-ms 100 --ui-path /app/ui --http-port 3000 --ws-port 3001"]

  python-sensing:
    build:
      context: ..
      dockerfile: docker/Dockerfile.python
    image: ruvnet/wifi-densepose:python
    ports:
      - "8765:8765"   # WebSocket
      - "8080:8080"   # UI
    environment:
      - PYTHONUNBUFFERED=1
