version: "3.8"

services:
  # ============================================================================
  # 8020: ZEN Coordinator - Master Controller (HTTP ↔ MCP Bridge)  
  # ============================================================================
  mega-orchestrator:
    build: ./config
    container_name: mega-orchestrator
    ports:
      - "8020:8020"
    environment:
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=${REDIS_URL:-redis://redis:6379}
    depends_on:
      - postgresql
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # ============================================================================
  # 8001-8010: Core MCP Services (Základní služby)
  # ============================================================================
  
  # 8001: Filesystem MCP - File Operations
  filesystem-mcp:
    build: /home/orchestration/mcp-servers/filesystem-mcp
    container_name: mcp-filesystem
    ports:
      - "8001:8000"
    volumes:
      - /home/orchestration/data/workspaces:/workspace
      - /home:/home:ro
      - /tmp:/tmp
    environment:
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=redis://redis:6379
    depends_on:
      - postgresql
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # 8002: Git MCP - Version Control
  git-mcp:
    build: /home/orchestration/mcp-servers/git-mcp
    container_name: mcp-git
    ports:
      - "8002:8000"
    volumes:
      - /home/orchestration/data/repositories:/repositories
      - /home/orchestration/data/workspaces:/workspace
    environment:
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=redis://redis:6379
    depends_on:
      - postgresql
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # 8003: Terminal MCP - Command Execution
  terminal-mcp:
    build: /home/orchestration/mcp-servers/terminal-mcp
    container_name: mcp-terminal
    ports:
      - "8003:8000"
    privileged: true
    environment:
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=redis://redis:6379
    depends_on:
      - postgresql
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # 8004: Database MCP - Data Operations
  database-mcp:
    build: /home/orchestration/mcp-servers/database-mcp
    container_name: mcp-database
    ports:
      - "8004:8000"
    volumes:
      - /home/orchestration/data/database:/data
    environment:
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=redis://redis:6379
    depends_on:
      - postgresql
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # 8005: Memory MCP - Simple Storage
  memory-mcp:
    build: /home/orchestration/mcp-servers/memory-mcp
    container_name: mcp-memory
    ports:
      - "8005:8000"
    volumes:
      - /home/orchestration/data/databases:/home/orchestration/data/databases
    environment:
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=redis://redis:6379
    depends_on:
      - postgresql
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # 8006: Network MCP - Network Operations (placeholder - to be implemented)
  network-mcp:
    build: /home/orchestration/mcp-servers/network-mcp
    container_name: mcp-network-service
    ports:
      - "8006:8000"
    working_dir: /app
    networks:
      - mcp-network

  # 8007: System MCP - System Info (placeholder - to be implemented)  
  system-mcp:
    build: /home/orchestration/mcp-servers/system-mcp
    container_name: mcp-system
    ports:
      - "8007:8000"
    working_dir: /app
    networks:
      - mcp-network

  # 8008: Security MCP - Security Operations (placeholder - to be implemented)
  security-mcp:
    build: /home/orchestration/mcp-servers/security-mcp
    container_name: mcp-security
    ports:
      - "8008:8000"
    working_dir: /app
    restart: unless-stopped
    networks:
      - mcp-network

  # 8009: Config MCP - Configuration Management (placeholder - to be implemented)
  config-mcp:
    build: /home/orchestration/mcp-servers/config-mcp
    container_name: mcp-config
    ports:
      - "8009:8000"
    working_dir: /app
    restart: unless-stopped
    networks:
      - mcp-network

  # 8010: Log MCP - Logging Operations (placeholder - to be implemented)
  log-mcp:
    build: /home/orchestration/mcp-servers/log-mcp
    container_name: mcp-log
    ports:
      - "8010:8000"
    working_dir: /app
    restart: unless-stopped
    networks:
      - mcp-network

  # ============================================================================
  # 8011-8020: AI/Enhanced Services (Pokročilé AI služby)
  # ============================================================================

  # 8011: Research MCP - AI Research
  research-mcp:
    build: /home/orchestration/mcp-servers/research-mcp
    container_name: mcp-research
    ports:
      - "8011:8000"
    environment:
      - PERPLEXITY_API_KEY=${PERPLEXITY_API_KEY:-your_perplexity_api_key_here}
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=redis://redis:6379
    depends_on:
      - postgresql
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # 8012: Advanced Memory MCP - AI Memory (vector search, semantic similarity)
  advanced-memory-mcp:
    image: node:18-alpine
    container_name: mcp-advanced-memory
    ports:
      - "8012:8000"
    working_dir: /app
    volumes:
      - /home/orchestration/mcp-servers/cldmemory:/app
    environment:
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=redis://redis:6379
      - QDRANT_URL=http://qdrant-vector:6333
      - GEMINI_API_KEY=${GEMINI_API_KEY:-your_gemini_api_key_here}
      - MCP_SERVER_PORT=8000
    command: sh -c "npm install && npm start"
    depends_on:
      - postgresql
      - redis
      - qdrant-vector
    restart: unless-stopped
    networks:
      - mcp-network

  # 8013: Transcriber MCP - Audio Processing
  transcriber-mcp:
    build: /home/orchestration/mcp-servers/webm-transcriber
    container_name: mcp-transcriber
    ports:
      - "8013:8000"
    volumes:
      - /home/orchestration/data/transcripts:/transcripts
      - /tmp:/tmp
    environment:
      - MCP_DATABASE_URL=${MCP_DATABASE_URL:-postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified}
      - REDIS_URL=redis://redis:6379
    depends_on:
      - postgresql
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # 8014-8019: Placeholders for future AI services
  vision-mcp:
    build: /home/orchestration/mcp-servers/system-mcp
    container_name: mcp-vision
    ports:
      - "8014:8000"
    working_dir: /app
    restart: unless-stopped
    networks:
      - mcp-network

  # 8024: PostgreSQL MCP Wrapper - Database Operations API
  postgresql-mcp-wrapper:
    build: /home/orchestration/mcp-servers/postgresql-mcp
    container_name: mcp-postgresql-wrapper
    ports:
      - "8024:8000"
    environment:
      - DATABASE_URL=postgresql://mcp_admin:change_me_in_production@postgresql:5432/mcp_unified
    depends_on:
      - postgresql
    restart: unless-stopped
    networks:
      - mcp-network

  # 8025: Redis MCP Wrapper - Cache and Session Management API
  redis-mcp-wrapper:
    build: /home/orchestration/mcp-servers/redis-mcp
    container_name: mcp-redis-wrapper
    ports:
      - "8025:8000"
    environment:
      - REDIS_URL=redis://redis:6379
    depends_on:
      - redis
    restart: unless-stopped
    networks:
      - mcp-network

  # 8026: Qdrant MCP Wrapper - Vector Database Operations API
  qdrant-mcp-wrapper:
    build: /home/orchestration/mcp-servers/qdrant-mcp
    container_name: mcp-qdrant-wrapper
    ports:
      - "8026:8000"
    environment:
      - QDRANT_URL=http://qdrant-vector:6333
    depends_on:
      - qdrant-vector
    restart: unless-stopped
    networks:
      - mcp-network

  # ============================================================================
  # 8021-8023: Support Services (Podporné databáze a cache)
  # ============================================================================

  # 8021: PostgreSQL - Primary Database
  postgresql:
    image: postgres:15
    container_name: mcp-postgresql
    environment:
      - POSTGRES_DB=${POSTGRES_DB:-mcp_unified}
      - POSTGRES_USER=${POSTGRES_USER:-mcp_admin}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-change_me_in_production}
    ports:
      - "8021:5432"
    volumes:
      - /home/orchestration/data/postgresql:/var/lib/postgresql/data
      - /home/orchestration/data/backups:/backups
    restart: unless-stopped
    networks:
      - mcp-network

  # 8022: Redis - Cache/Sessions
  redis:
    image: redis:7-alpine
    container_name: mcp-redis
    ports:
      - "8022:6379"
    volumes:
      - /home/orchestration/data/redis:/data
    restart: unless-stopped
    networks:
      - mcp-network

  # 8023: Qdrant Vector DB - Vector Storage
  qdrant-vector:
    image: qdrant/qdrant:latest
    container_name: mcp-qdrant
    ports:
      - "8023:6333"
      - "8027:6334"
    volumes:
      - /home/orchestration/data/qdrant:/qdrant/storage
    environment:
      - QDRANT__SERVICE__HTTP_PORT=6333
      - QDRANT__SERVICE__GRPC_PORT=6334
    restart: unless-stopped
    networks:
      - mcp-network

  # ============================================================================
  # 8028-8030: Management Services (Správa a monitoring)
  # ============================================================================

  # 8028: Monitoring - Health Checks & Metrics
  monitoring:
    image: prom/prometheus:latest
    container_name: mcp-monitoring
    ports:
      - "8028:9090"
    volumes:
      - /home/orchestration/config/prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
      - "--storage.tsdb.path=/prometheus"
    restart: unless-stopped
    networks:
      - mcp-network

  # 8029: Backup Service - Automated backups
  backup-service:
    build: /home/orchestration/mcp-servers/system-mcp
    container_name: mcp-backup
    ports:
      - "8029:8000"
    working_dir: /app
    volumes:
      - /home/orchestration/data:/data:ro
      - /home/orchestration/data/backups:/backups
    restart: unless-stopped
    networks:
      - mcp-network

  # 8030: Message Queue - Task queuing
  message-queue:
    image: redis:7-alpine
    container_name: mcp-message-queue
    ports:
      - "8030:6379"
    volumes:
      - /home/orchestration/data/queue:/data
    command: redis-server --appendonly yes
    restart: unless-stopped
    networks:
      - mcp-network


  # ============================================================================
  # 8014-8015: MQTT Services (Message Queue and IoT Communication)  
  # ============================================================================

  # 8014: MQTT Broker - Mosquitto Message Broker
  mqtt-broker:
    image: eclipse-mosquitto:2
    container_name: mqtt-broker
    ports:
      - "8018:1883"
    volumes:
      - /home/orchestration/mcp-servers/mqtt-broker/config:/mosquitto/config
      - /home/orchestration/data/mqtt-data:/mosquitto/data
      - /home/orchestration/data/mqtt-log:/mosquitto/log
    restart: unless-stopped
    networks:
      - mcp-network

  # 8015: MQTT MCP Server - MQTT Operations via MCP Protocol
  mqtt-mcp:
    build: /home/orchestration/mcp-servers/mqtt-mcp
    container_name: mcp-mqtt
    ports:
      - "8019:8000"
    environment:
      - MQTT_BROKER=mqtt-broker
      - MQTT_PORT=1883
      - MQTT_USERNAME=mcp_admin
      - MQTT_PASSWORD=mcp_secure_mqtt_2024
    depends_on:
      - mqtt-broker
    restart: unless-stopped
    networks:
      - mcp-network

networks:
  mcp-network:
    driver: bridge
