services:
  companion:
    build:
      context: .
      dockerfile: docker/companion-tier1.Dockerfile
    image: gps-denied-onboard/companion:dev
    depends_on:
      db:
        condition: service_healthy
      mock-sat:
        condition: service_healthy
    environment:
      GPS_DENIED_FC_PROFILE: ardupilot_plane
      GPS_DENIED_TIER: "1"
      DB_URL: postgresql://gps_denied:dev@db:5432/gps_denied
      SATELLITE_PROVIDER_URL: http://mock-sat:5100
      CAMERA_CALIBRATION_PATH: /fixtures/calibration/adti26.json
      LOG_LEVEL: DEBUG
      LOG_SINK: console
      INFERENCE_BACKEND: pytorch_fp16
      FDR_PATH: /var/lib/gps-denied/fdr
      TILE_CACHE_PATH: /var/lib/gps-denied/tiles
      MAVLINK_SIGNING_KEY: /fixtures/mavlink_signing/dev_key
    volumes:
      - ./tests/fixtures:/fixtures:ro
      - fdr-data:/var/lib/gps-denied/fdr
      - tile-data:/var/lib/gps-denied/tiles
    healthcheck:
      test: ["CMD", "python3", "-m", "gps_denied_onboard.healthcheck"]
      interval: 10s
      timeout: 3s
      retries: 3

  operator-tooling:
    build:
      context: .
      dockerfile: docker/operator-tooling.Dockerfile
    image: gps-denied-onboard/operator-tooling:dev
    depends_on:
      db:
        condition: service_healthy
    environment:
      GPS_DENIED_FC_PROFILE: ardupilot_plane
      GPS_DENIED_TIER: "1"
      DB_URL: postgresql://gps_denied:dev@db:5432/gps_denied
      SATELLITE_PROVIDER_URL: http://mock-sat:5100
      CAMERA_CALIBRATION_PATH: /fixtures/calibration/adti26.json
      LOG_LEVEL: DEBUG
      LOG_SINK: console
      INFERENCE_BACKEND: pytorch_fp16
      FDR_PATH: /var/lib/gps-denied/fdr
      TILE_CACHE_PATH: /var/lib/gps-denied/tiles
      MAVLINK_SIGNING_KEY: /fixtures/mavlink_signing/dev_key
    volumes:
      - ./tests/fixtures:/fixtures:ro
      - tile-data:/var/lib/gps-denied/tiles

  mock-sat:
    build:
      context: .
      dockerfile: docker/mock-suite-sat-service.Dockerfile
    image: gps-denied-onboard/mock-suite-sat-service:dev
    ports:
      - "5100:5100"
    healthcheck:
      test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:5100/healthz').read()"]
      interval: 5s
      timeout: 2s
      retries: 5

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: gps_denied
      POSTGRES_PASSWORD: dev
      POSTGRES_DB: gps_denied
    volumes:
      - db-data:/var/lib/postgresql/data
      - ./docker/db-init:/docker-entrypoint-initdb.d:ro
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U gps_denied -d gps_denied"]
      interval: 5s
      timeout: 3s
      retries: 10

volumes:
  db-data: {}
  fdr-data: {}
  tile-data: {}
