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

volumes:
  supabase-config:
  clamav-data:
  workspace-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:
    <<: *agpt-services
    extends:
      file: ./docker-compose.platform.yml
      service: redis

  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
    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:
    <<: *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.

  # 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
      - rabbitmq
      - clamav
      - migrate

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