version: '3.8'

services:
  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: ai_assistant
      MYSQL_USER: admin
      MYSQL_PASSWORD: admin123
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./docker/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      timeout: 20s
      retries: 10

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    restart: unless-stopped

  backend:
    build: ./backend
    ports:
      - "8000:8000"
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_started
    volumes:
      - ./backend:/app
      - uploads_volume:/app/uploads
      - temp_volume:/app/temp
    environment:
      - DATABASE_URL=mysql://admin:admin123@mysql:3306/ai_assistant
      - REDIS_URL=redis://redis:6379
    restart: unless-stopped

  celery_worker:
    build: ./backend
    command: celery -A app.celery_app worker --loglevel=info -Q task_queue
    depends_on:
      - mysql
      - redis
    volumes:
      - ./backend:/app
      - uploads_volume:/app/uploads
      - temp_volume:/app/temp
    restart: unless-stopped

  celery_beat:
    build: ./backend
    command: celery -A app.celery_app beat --loglevel=info
    depends_on:
      - mysql
      - redis
    volumes:
      - ./backend:/app
    restart: unless-stopped

  flower:
    build: ./backend
    command: celery -A app.celery_app flower --port=5555
    ports:
      - "5555:5555"
    depends_on:
      - celery_worker
    restart: unless-stopped

volumes:
  mysql_data:
  uploads_volume:
  temp_volume:
