networks:
  app-network:
    name: app-network
  shared-network:
    name: shared-network

volumes:
  supabase-config:
  clamav-data:
  workspace-data:
  falkordb_data:

x-agpt-services:
  &agpt-services
  networks:
    - app-network
    - shared-network

x-supabase-services:
  &supabase-services
  networks:
    - app-network
    - shared-network


services:
  # AGPT services
  migrate:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: migrate

  redis-0:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: redis-0

  redis-1:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: redis-1

  redis-2:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: redis-2

  redis-init:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: redis-init

  falkordb:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: falkordb

  rabbitmq:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: rabbitmq

  rest_server:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: rest_server

  executor:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: executor

  copilot_executor:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: copilot_executor

  websocket_server:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: websocket_server

  database_manager:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: database_manager

  scheduler_server:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: scheduler_server

  notification_server:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: notification_server

  clamav:
    <<: *agpt-services
    image: clamav/clamav-debian:latest
    ports:
      - "3310:3310"
    volumes:
      - clamav-data:/var/lib/clamav
    environment:
      - CLAMAV_NO_FRESHCLAMD=false
      - CLAMD_CONF_StreamMaxLength=50M
      - CLAMD_CONF_MaxFileSize=100M
      - CLAMD_CONF_MaxScanSize=100M
      - CLAMD_CONF_MaxThreads=12
      - CLAMD_CONF_ReadTimeout=300
      - CLAMD_CONF_TCPAddr=0.0.0.0
    healthcheck:
      test: ["CMD-SHELL", "clamdscan --version || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

  frontend:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: frontend

  # Supabase services (minimal: auth + db + kong)
  kong:
    <<: *supabase-services
    extends:
      file: ./db/docker/docker-compose.yml
      service: kong

  auth:
    <<: *supabase-services
    extends:
      file: ./db/docker/docker-compose.yml
      service: auth
    environment:
      GOTRUE_MAILER_AUTOCONFIRM: true

  # db waits on rabbitmq:service_healthy to gate startup ordering:
  # concurrent container creation in E2B's Docker races RabbitMQ's
  # .erlang.cookie write, producing `eacces` at broker boot. Supabase's
  # auth/meta/studio + migrate all depends_on db:service_healthy
  # upstream, so gating db alone cascades to the rest of the stack.
  db:
    <<: *supabase-services
    extends:
      file: ./db/docker/docker-compose.yml
      service: db
    ports:
      - 5432:5432 # We don't use Supavisor locally, so we expose the db directly.
    depends_on:
      rabbitmq:
        condition: service_healthy

  # Studio and its dependencies for local development only
  meta:
    <<: *supabase-services
    profiles:
      - local
    extends:
      file: ./db/docker/docker-compose.yml
      service: meta

  studio:
    <<: *supabase-services
    profiles:
      - local
    extends:
      file: ./db/docker/docker-compose.yml
      service: studio
    depends_on:
      meta:
        condition: service_healthy
    # environment:
    #   NEXT_PUBLIC_ENABLE_LOGS: false  # Disable analytics/logging features

  deps:
    <<: *supabase-services
    profiles:
      - local
    image: busybox
    command: /bin/true
    depends_on:
      - kong
      - auth
      - db
      - studio
      - redis-0
      - redis-1
      - redis-2
      - redis-init
      - rabbitmq
      - clamav
      - falkordb
      - migrate

  deps_backend:
    <<: *agpt-services
    profiles:
      - local
    image: busybox
    command: /bin/true
    depends_on:
      - deps
      - rest_server
      - executor
      - copilot_executor
      - websocket_server
      - database_manager
      - scheduler_server
