services:
  mailpit:
    image: axllent/mailpit:v1.29
    ports:
      - "1025:1025"
      - "8025:8025"

  worker:
    build:
      context: ..
      dockerfile: e2e/Dockerfile.worker
    ports:
      - "8787:8787"
    depends_on:
      - mailpit
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://localhost:8787/health_check"]
      interval: 3s
      timeout: 5s
      start_period: 10s
      retries: 20

  worker-subdomain:
    build:
      context: ..
      dockerfile: e2e/Dockerfile.worker
    ports:
      - "8789:8789"
    command: ["pnpm", "exec", "wrangler", "dev", "--port", "8789", "--ip", "0.0.0.0"]
    depends_on:
      - mailpit
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://localhost:8789/health_check"]
      interval: 3s
      timeout: 5s
      start_period: 10s
      retries: 20

  worker-env-off:
    build:
      context: ..
      dockerfile: e2e/Dockerfile.worker
    ports:
      - "8790:8790"
    command: ["pnpm", "exec", "wrangler", "dev", "--port", "8790", "--ip", "0.0.0.0"]
    volumes:
      - ./fixtures/wrangler.toml.e2e.env-off:/app/worker/wrangler.toml:ro
    depends_on:
      - mailpit
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://localhost:8790/health_check"]
      interval: 3s
      timeout: 5s
      start_period: 10s
      retries: 20

  worker-gzip:
    build:
      context: ..
      dockerfile: e2e/Dockerfile.worker
      args:
        WRANGLER_TOML: e2e/fixtures/wrangler.toml.e2e.gzip
    ports:
      - "8788:8788"
    command: ["pnpm", "exec", "wrangler", "dev", "--port", "8788", "--ip", "0.0.0.0"]
    depends_on:
      - mailpit
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://localhost:8788/health_check"]
      interval: 3s
      timeout: 5s
      start_period: 10s
      retries: 20

  worker-send-mail-domain:
    build:
      context: ..
      dockerfile: e2e/Dockerfile.worker
      args:
        WRANGLER_TOML: e2e/fixtures/wrangler.toml.e2e.send-mail-domain
    ports:
      - "8791:8791"
    command: ["pnpm", "exec", "wrangler", "dev", "--port", "8791", "--ip", "0.0.0.0"]
    depends_on:
      - mailpit
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://localhost:8791/health_check"]
      interval: 3s
      timeout: 5s
      start_period: 10s
      retries: 20

  frontend:
    build:
      context: ..
      dockerfile: e2e/Dockerfile.frontend
    ports:
      - "5173:5173"
    depends_on:
      worker:
        condition: service_healthy

  smtp-proxy:
    build:
      context: ../smtp_proxy_server
      dockerfile: dockerfile
    ports:
      - "11025:8025"
      - "11143:11143"
    environment:
      PROXY_URL: http://worker:8787
      PORT: "8025"
      IMAP_PORT: "11143"
    depends_on:
      worker:
        condition: service_healthy

  smtp-proxy-tls:
    build:
      context: ../smtp_proxy_server
      dockerfile: dockerfile
    ports:
      - "11026:8026"
      - "11144:11144"
    environment:
      PROXY_URL: http://worker:8787
      PORT: "8026"
      IMAP_PORT: "11144"
      smtp_tls_cert: /certs/cert.pem
      smtp_tls_key: /certs/key.pem
      imap_tls_cert: /certs/cert.pem
      imap_tls_key: /certs/key.pem
    entrypoint: ["/bin/bash", "/e2e-scripts/smtp-tls-entrypoint.sh"]
    volumes:
      - ./scripts:/e2e-scripts:ro
    depends_on:
      worker:
        condition: service_healthy

  e2e-runner:
    build:
      context: ..
      dockerfile: e2e/Dockerfile.e2e
    environment:
      WORKER_URL: http://worker:8787
      WORKER_URL_SUBDOMAIN: http://worker-subdomain:8789
      WORKER_URL_ENV_OFF: http://worker-env-off:8790
      WORKER_GZIP_URL: http://worker-gzip:8788
      WORKER_URL_SEND_MAIL_DOMAIN: http://worker-send-mail-domain:8791
      FRONTEND_URL: https://frontend:5173
      MAILPIT_API: http://mailpit:8025/api
      SMTP_PROXY_HOST: smtp-proxy
      SMTP_PROXY_SMTP_PORT: "8025"
      SMTP_PROXY_IMAP_PORT: "11143"
      SMTP_PROXY_TLS_HOST: smtp-proxy-tls
      SMTP_PROXY_TLS_SMTP_PORT: "8026"
      SMTP_PROXY_TLS_IMAP_PORT: "11144"
      CI: "true"
    depends_on:
      worker:
        condition: service_healthy
      worker-subdomain:
        condition: service_healthy
      worker-env-off:
        condition: service_healthy
      worker-gzip:
        condition: service_healthy
      worker-send-mail-domain:
        condition: service_healthy
      frontend:
        condition: service_started
      smtp-proxy:
        condition: service_started
      smtp-proxy-tls:
        condition: service_started
    volumes:
      - ./test-results:/app/e2e/test-results
      - ./playwright-report:/app/e2e/playwright-report
