# docker-compose configuration for Layer 7 end-to-end tests.
#
# Usage:
#   docker-compose -f docker-compose.test.yml up -d
#   E2E_API_URL=http://localhost:8001 pytest tests/e2e/test_e2e.py -v -m e2e
#   docker-compose -f docker-compose.test.yml down -v
#
# Uses a separate DB (filtr_test) and port (8001) so it can run alongside
# the development stack without conflicts.

services:
  mysql_test:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: filtr_test
      MYSQL_USER: filtr
      MYSQL_PASSWORD: filtr
      MYSQL_ROOT_PASSWORD: rootpassword
    ports:
      - "3307:3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "filtr", "-pfiltr"]
      interval: 5s
      timeout: 5s
      retries: 15
    tmpfs:
      - /var/lib/mysql  # Use tmpfs for faster CI (data not persisted across runs)
    volumes:
      - ./database/data:/docker-entrypoint-initdb.d/

  redis_test:
    image: redis:alpine
    ports:
      - "6380:6379"
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 3s
      timeout: 3s
      retries: 10

  app_test:
    build:
      context: .
      target: deploy
    ports:
      - "8001:8080"
    environment:
      - DATABASE_URL=mysql+aiomysql://filtr:filtr@mysql_test:3306/filtr_test
      - REDIS_URL=redis://redis_test:6379/0
      - CELERY_BROKER_URL=redis://redis_test:6379/0
      - CELERY_RESULT_BACKEND=redis://redis_test:6379/0
      - SPOTIFY_CLIENT_ID=
      - SPOTIFY_CLIENT_SECRET=
    depends_on:
      mysql_test:
        condition: service_healthy
      redis_test:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 5s
      timeout: 5s
      retries: 10

  worker_test:
    build:
      context: .
      target: deploy
    command: celery -A worker.tasks.celery_app worker --loglevel=info --concurrency=2
    entrypoint: ''
    environment:
      - DATABASE_URL=mysql+aiomysql://filtr:filtr@mysql_test:3306/filtr_test
      - REDIS_URL=redis://redis_test:6379/0
      - CELERY_BROKER_URL=redis://redis_test:6379/0
      - CELERY_RESULT_BACKEND=redis://redis_test:6379/0
      - SPOTIFY_CLIENT_ID=
      - SPOTIFY_CLIENT_SECRET=
    depends_on:
      mysql_test:
        condition: service_healthy
      redis_test:
        condition: service_healthy

  celery_flower_test:
    build:
      context: .
      target: deploy
    command: celery -A worker.tasks.celery_app flower --port=5555
    entrypoint: ''
    ports:
      - "5555:5555"
    environment:
      - DATABASE_URL=mysql+aiomysql://filtr:filtr@mysql_test:3306/filtr_test
      - REDIS_URL=redis://redis_test:6379/0
      - CELERY_BROKER_URL=redis://redis_test:6379/0
      - CELERY_RESULT_BACKEND=redis://redis_test:6379/0
      - SPOTIFY_CLIENT_ID=
      - SPOTIFY_CLIENT_SECRET=
    depends_on:
      mysql_test:
        condition: service_healthy
      redis_test:
        condition: service_healthy
