services:
  # DAGI Router - Core routing service
  router:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: dagi-router
    ports:
      - "9102:9102"
    environment:
      - DAGI_ROUTER_CONFIG=/app/router-config.yml
      - RBAC_BASE_URL=http://rbac:9200
      - DEVTOOLS_BASE_URL=http://devtools:8008
      - CREWAI_BASE_URL=http://crewai:9010
    volumes:
      - ./router-config.yml:/app/router-config.yml:ro
      - ./logs:/app/logs
    depends_on:
      - devtools
      - crewai
      - rbac
    networks:
      - dagi-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9102/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

  # DevTools Backend
  devtools:
    build:
      context: ./devtools-backend
      dockerfile: Dockerfile
    container_name: dagi-devtools
    ports:
      - "8008:8008"
    volumes:
      - ./workspace:/workspace
      - ./logs:/app/logs
    networks:
      - dagi-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8008/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  # CrewAI Orchestrator
  crewai:
    build:
      context: ./orchestrator
      dockerfile: Dockerfile
    container_name: dagi-crewai
    ports:
      - "9010:9010"
    environment:
      - ROUTER_URL=http://router:9102
    volumes:
      - ./logs:/app/logs
    networks:
      - dagi-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9010/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  # Bot Gateway (with DAARWIZZ)
  gateway:
    build:
      context: ./gateway-bot
      dockerfile: Dockerfile
    container_name: dagi-gateway
    ports:
      - "9300:9300"
    environment:
      - ROUTER_URL=http://router:9102
      - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-}
      - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN:-}
      - DAARWIZZ_NAME=DAARWIZZ
      - DAARWIZZ_PROMPT_PATH=/app/gateway-bot/daarwizz_prompt.txt
    volumes:
      - ./logs:/app/logs
    depends_on:
      - router
    networks:
      - dagi-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9300/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  # microDAO RBAC Service
  rbac:
    build:
      context: ./microdao
      dockerfile: Dockerfile
    container_name: dagi-rbac
    ports:
      - "9200:9200"
    environment:
      - DATABASE_URL=${RBAC_DATABASE_URL:-sqlite:///rbac.db}
    volumes:
      - ./data/rbac:/app/data
      - ./logs:/app/logs
    networks:
      - dagi-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9200/health"]
      interval: 30s
      timeout: 10s
      retries: 3

networks:
  dagi-network:
    driver: bridge
    name: dagi-network
