version: '3.8'
services:
  api:
    build: .
    ports:
      - "5001:5001"
    environment:
      - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
      - FLASK_CONFIG=development
      - CELERY_BROKER_URL=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
      - TIMESCALE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@timescaledb:5432/timescale
      - QDRANT_URL=http://qdrant:6333
    depends_on:
      - db
      - redis
      - timescaledb
      - qdrant

  core-engine:
    build:
      context: . # Use root context to access shared/proto
      dockerfile: backend/core_engine/Dockerfile
    environment:
      - RUST_LOG=info
    ports:
      - "50051:50051"
    depends_on:
      - timescaledb
      - qdrant

  client:
    build:
      context: ./services/webapp/client
      dockerfile: Dockerfile
    ports:
      - "80:80"
    depends_on:
      - api

  v24-dashboard:
    build:
      context: ./services/v24_dashboard
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    depends_on:
      - api
      - core-engine

  db:
    image: postgres:13-alpine
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    ports:
      - "5432:5432"

  timescaledb:
    image: timescale/timescaledb-ha:pg14-latest
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    ports:
      - "5433:5432"

  qdrant:
    image: qdrant/qdrant
    ports:
      - "6333:6333"

  redis:
    image: redis:6-alpine

  worker:
    build: .
    command: celery -A services.webapp.celery worker --loglevel=info
    environment:
      - CELERY_BROKER_URL=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
    depends_on:
      - redis

  neo4j:
    image: neo4j:4.4
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=${NEO4J_USER}/${NEO4J_PASSWORD}

  # V24 Services
  timescaledb:
    image: timescale/timescaledb:latest-pg14
    environment:
      - POSTGRES_USER=${POSTGRES_USER:-postgres}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
      - POSTGRES_DB=unified_ledger
    ports:
      - "5433:5432"
    volumes:
      - ./backend/core_engine/migrations/init.sql:/docker-entrypoint-initdb.d/init.sql

  qdrant:
    image: qdrant/qdrant
    ports:
      - "6333:6333"
