version: '3.8'

services:
  # Servicio de MongoDB
  mongodb:
    image: mongo:7.0
    container_name: epicrisis_mongodb
    restart: always
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin123
      MONGO_INITDB_DATABASE: Epicrisis
    volumes:
      - mongodb_data:/data/db
      - mongodb_config:/data/configdb
    networks:
      - epicrisis_network

  # Servicio de Redis (opcional, para caché)
  redis:
    image: redis:7-alpine
    container_name: epicrisis_redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - epicrisis_network

  # Servicio de la aplicación FastAPI
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: epicrisis_app
    restart: always
    ports:
      - "7000:7000"
    environment:
      - MONGO_URI=mongodb://admin:admin123@mongodb:27017
      - DB_NAME=Epicrisis
      - COLLECTION_NAME=HistoriaClinica
      - REDIS_URL=redis://redis:6379
      - SECRET_KEY=${SECRET_KEY:-cidti40}
      - GROQ_API_KEY=${GROQ_API_KEY}
      - GEMINI_API_KEY=${GEMINI_API_KEY}
      - GOOGLE_API_KEY=${GOOGLE_API_KEY}
    volumes:
      # Montar el código fuente para desarrollo (comentar en producción)
      - .:/app
      # Volúmenes persistentes para índices FAISS
      - faiss_data:/app/faiss_principal_jerarquico
      - cups_data:/app/cups_faiss
      - soat_data:/app/soat_faiss
      - rag_data:/app/rag_medical_index
    depends_on:
      - mongodb
      - redis
    networks:
      - epicrisis_network
    command: uvicorn app.main:app --host 0.0.0.0 --port 7000 --reload

# Volúmenes para persistencia de datos
volumes:
  mongodb_data:
    driver: local
  mongodb_config:
    driver: local
  redis_data:
    driver: local
  faiss_data:
    driver: local
  cups_data:
    driver: local
  soat_data:
    driver: local
  rag_data:
    driver: local

# Red para comunicación entre servicios
networks:
  epicrisis_network:
    driver: bridge
