---

x-default-image: &default-image ${CLIENT_LIBS_TEST_IMAGE:-redislabs/client-libs-test:8.8-m02}

services:
  redis:
    image: *default-image
    platform: linux/amd64
    container_name: redis-standalone
    environment:
      - TLS_ENABLED=yes
      - TLS_CLIENT_CNS=testcertuser
      - TLS_AUTH_CLIENTS_USER=CN
      - REDIS_CLUSTER=no
      - PORT=6379
      - TLS_PORT=6666
    command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --tls-auth-clients optional --save ""}
    ports:
      - 6379:6379
      - 6666:6666 # TLS port
    volumes:
      - "./dockers/standalone:/redis/work"
    profiles:
      - standalone
      - sentinel
      - all-stack
      - all
      - e2e

  osscluster:
    image: *default-image
    platform: linux/amd64
    container_name: redis-osscluster
    environment:
      - NODES=6
      - PORT=16600
    command: "--cluster-enabled yes"
    ports:
      - "16600-16605:16600-16605"
    volumes:
      - "./dockers/osscluster:/redis/work"
    profiles:
      - cluster
      - all-stack
      - all

  cae-resp-proxy:
    image: redislabs/client-resp-proxy:latest
    container_name: cae-resp-proxy
    environment:
      - TARGET_HOST=redis
      - TARGET_PORT=6379
      - LISTEN_PORT=17000,17001,17002,17003  # 4 proxy nodes: initially show 3, swap in 4th during SMIGRATED
      - LISTEN_HOST=0.0.0.0
      - API_PORT=3000
      - DEFAULT_INTERCEPTORS=cluster,hitless
    ports:
      - "17000:17000"  # Proxy node 1 (host:container)
      - "17001:17001"  # Proxy node 2 (host:container)
      - "17002:17002"  # Proxy node 3 (host:container)
      - "17003:17003"  # Proxy node 4 (host:container) - hidden initially, swapped in during SMIGRATED
      - "18100:3000"  # HTTP API port (host:container)
    depends_on:
      - redis
    profiles:
      - e2e
      - all

  proxy-fault-injector:
    build:
      context: .
      dockerfile: maintnotifications/e2e/cmd/proxy-fi-server/Dockerfile
    container_name: proxy-fault-injector
    ports:
      - "15000:5000"  # Fault injector API port (host:container)
    depends_on:
      - cae-resp-proxy
    environment:
      - PROXY_API_URL=http://cae-resp-proxy:3000
    profiles:
      - e2e
      - all

  osscluster-tls:
    image: *default-image
    platform: linux/amd64
    container_name: redis-osscluster-tls
    environment:
      - NODES=6
      - PORT=6430
      - TLS_PORT=5430
      - TLS_ENABLED=yes
      - TLS_CLIENT_CNS=testcertuser
      - TLS_AUTH_CLIENTS_USER=CN
      - REDIS_CLUSTER=yes
      - REPLICAS=1
    command: "--tls-auth-clients optional --cluster-announce-ip 127.0.0.1"
    ports:
      - "6430-6435:6430-6435"      # Regular ports
      - "5430-5435:5430-5435"      # TLS ports (set via TLS_PORT env var)
      - "16430-16435:16430-16435"  # Cluster bus ports (PORT + 10000)
    volumes:
      - "./dockers/osscluster-tls:/redis/work"
    profiles:
      - cluster-tls
      - all

  sentinel-cluster:
    image: *default-image
    platform: linux/amd64
    container_name: redis-sentinel-cluster
    network_mode: "host"
    environment:
      - NODES=3
      - TLS_ENABLED=yes
      - TLS_CLIENT_CNS=testcertuser
      - TLS_AUTH_CLIENTS_USER=CN
      - REDIS_CLUSTER=no
      - PORT=9121
    command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --tls-auth-clients optional --save ""}
    #ports:
    #  - "9121-9123:9121-9123"
    volumes:
      - "./dockers/sentinel-cluster:/redis/work"
    profiles:
      - sentinel
      - all-stack
      - all

  sentinel:
    image: *default-image
    platform: linux/amd64
    container_name: redis-sentinel
    depends_on:
      - sentinel-cluster
    environment:
      - NODES=3
      - REDIS_CLUSTER=no
      - PORT=26379
    command: ${REDIS_EXTRA_ARGS:---sentinel}
    network_mode: "host"
    #ports:
    #  - 26379:26379
    #  - 26380:26380
    #  - 26381:26381
    volumes:
      - "./dockers/sentinel.conf:/redis/config-default/redis.conf"
      - "./dockers/sentinel:/redis/work"
    profiles:
      - sentinel
      - all-stack
      - all

  ring-cluster:
    image: *default-image
    platform: linux/amd64
    container_name: redis-ring-cluster
    environment:
      - NODES=3
      - TLS_ENABLED=yes
      - TLS_CLIENT_CNS=testcertuser
      - TLS_AUTH_CLIENTS_USER=CN
      - REDIS_CLUSTER=no
      - PORT=6390
    command: ${REDIS_EXTRA_ARGS:---enable-debug-command yes --enable-module-command yes --tls-auth-clients optional --save ""}
    ports:
      - "6390:6390"
      - "6391:6391"
      - "6392:6392"
    volumes:
      - "./dockers/ring:/redis/work"
    profiles:
      - ring
      - cluster
      - all-stack
      - all
