services:
  web:
    environment:
      SESSION_SECRET: "test-session-secret-32chars!xxxY"
      ADMIN_USERNAME: testadmin
      ADMIN_PASSWORD: "TestPassword2026!"
      CLICKHOUSE_PASSWORD: "test-clickhouse-password-2026"
      BASE_URL: http://localhost:3000
      NEXTAUTH_URL: http://localhost:3000
      # OAuth via Dex OIDC provider
      OAUTH_ENABLED: "true"
      OAUTH_PROVIDER_NAME: "Dex"
      OAUTH_CLIENT_ID: cpm-test-client
      OAUTH_CLIENT_SECRET: cpm-test-secret
      OAUTH_ISSUER: http://localhost:5556/dex
      OAUTH_AUTHORIZATION_URL: http://localhost:5556/dex/auth
      OAUTH_TOKEN_URL: http://dex:5556/dex/token
      OAUTH_USERINFO_URL: http://dex:5556/dex/userinfo
      OAUTH_ALLOW_AUTO_LINKING: "true"
      # Disable Better Auth rate limiting for E2E tests (many rapid auth requests)
      AUTH_RATE_LIMIT_ENABLED: "false"
  clickhouse:
    environment:
      CLICKHOUSE_PASSWORD: "test-clickhouse-password-2026"
  caddy:
    ports:
      - "80:80"
      - "443:443"
      # L4 test ports (TCP)
      - "15432:15432"
      - "15433:15433"
      # L4 test ports (UDP)
      - "15353:15353/udp"
  # Dex OIDC provider for OAuth E2E tests
  dex:
    image: dexidp/dex:v2.41.1
    command: ["dex", "serve", "/etc/dex/config.yml"]
    volumes:
      - ./tests/dex/config.yml:/etc/dex/config.yml:ro
    ports:
      - "5556:5556"
    networks:
      - caddy-network
  # Lightweight echo server reachable by Caddy as "echo-server:8080".
  # Returns a fixed body so tests can assert the proxy routed the request.
  echo-server:
    image: hashicorp/http-echo
    command: ["-text=echo-ok", "-listen=:8080"]
    networks:
      - caddy-network
  # Second echo server for load-balancing tests.
  # Returns a different body so tests can distinguish which upstream served the request.
  echo-server-2:
    image: hashicorp/http-echo
    command: ["-text=echo-server-2", "-listen=:8080"]
    networks:
      - caddy-network
  # Request-echo server: reflects the full HTTP request (method + path + headers) in the response body.
  # Used by path-prefix-rewrite tests to assert that Caddy rewrote the path before forwarding.
  whoami-server:
    image: traefik/whoami
    networks:
      - caddy-network
  # TCP echo server for L4 proxy tests.
  # Listens on port 9000 and echoes back anything sent to it with a prefix.
  tcp-echo:
    image: cjimti/go-echo
    platform: linux/amd64
    environment:
      TCP_PORT: "9000"
      NODE_NAME: "tcp-echo-ok"
    networks:
      - caddy-network
  # UDP echo server for L4 proxy tests.
  # Simple socat-based UDP echo: reflects any datagram back to sender.
  udp-echo:
    image: alpine/socat
    command: ["UDP4-RECVFROM:9001,fork", "EXEC:cat"]
    networks:
      - caddy-network

volumes:
  caddy-manager-data:
    name: caddy-manager-data-test
  caddy-data:
    name: caddy-data-test
  caddy-config:
    name: caddy-config-test
  caddy-logs:
    name: caddy-logs-test
  geoip-data:
    name: geoip-data-test
  clickhouse-data:
    name: clickhouse-data-test
