version: '3.9'

services:
  api:
    container_name: evolution_api
    image: evoapicloud/evolution-api:latest
    restart: always
    depends_on:
      - redis
      - postgres
    ports:
      - "127.0.0.1:9000:8080"
    volumes:
      - evolution_instances:/evolution/instances
    networks:
      - evolution-net
    env_file:
      - .env
    expose:
      - "8080"

  redis:
    image: redis:latest
    container_name: redis
    command: >
      redis-server --port 6379 --appendonly yes
    volumes:
      - evolution_redis:/data
    networks:
      - evolution-net
    # مفيش ports هنا — هنتعامل داخليًا بس

  postgres:
    container_name: postgres
    image: postgres:15
    command: [
      "postgres",
      "-c", "max_connections=200",
      "-c", "listen_addresses=*",
      "-c", "shared_buffers=256MB",
      "-c", "effective_cache_size=1GB",
      "-c", "work_mem=4MB"
    ]
    restart: always
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=evolution_db
      - POSTGRES_HOST_AUTH_METHOD=trust
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - evolution-net

  # pgbouncer:
  #   image: edoburu/pgbouncer:latest
  #   environment:
  #     DB_HOST: postgres
  #     DB_USER: user
  #     DB_PASSWORD: pass
  #     POOL_MODE: transaction
  #     AUTH_TYPE: trust
  #     MAX_CLIENT_CONN: 1000
  #     DEFAULT_POOL_SIZE: 25
  #   depends_on:
  #     - postgres
  #   ports:
  #     - "6543:5432"
  #   networks:
  #     - evolution-net

volumes:
  evolution_instances:
  evolution_redis:
  postgres_data:

networks:
  evolution-net:
    name: evolution-net
    driver: bridge
