version: "3.9"

# Unoapi Cloud + Redis + RabbitMQ + MinIO (S3)
# Exemplo para uso atrás de um proxy reverso genérico (Nginx, Caddy, etc.).

services:
  unoapi:
    image: ghcr.io/viperteccorporation/unoapi-cloud:3.0.0-beta-160
    container_name: unoapi
    ports:
      - "9876:9876" # Exponha essa porta no seu proxy (HTTP)
    depends_on:
      - unoapi-redis
      - unoapi-rabbitmq
    environment:
      # ========= CORE / AUTENTICAÇÃO =========
      HTTP_PROTOCOL: "https"                     # ou "http" se não tiver TLS no proxy
      BASE_URL: "https://sua-api.exemplo.com"   # URL pública usada nos webhooks/download de mídia

      UNOAPI_AUTH_TOKEN: "seu_token_aleatorio"   # token de autenticação da API Unoapi

      # ========= WEBHOOK -> CHATWOOT (ou outro consumidor) =========
      WEBHOOK_URL: "https://seu-chatwoot.exemplo.com/webhooks/whatsapp"
      WEBHOOK_TOKEN: "seu_webhook_token"
      WEBHOOK_HEADER: "Authorization"

      # ========= RABBITMQ / REDIS =========
      AMQP_URL: "amqp://seu_usuario_rabbit:seu_password_rabbit@unoapi-rabbitmq:5672"
      REDIS_URL: "redis://:sua_senha_redis@unoapi-redis:6379"

      # ========= STORAGE S3 (R2 / MinIO / outro) =========
      STORAGE_BUCKET_NAME: "seu_bucket_unoapi"
      STORAGE_ACCESS_KEY_ID: "seu_usuario_s3"
      STORAGE_SECRET_ACCESS_KEY: "sua_senha_s3"
      STORAGE_REGION: "us-east-1"
      STORAGE_ENDPOINT: "https://seu-endpoint-s3.exemplo.com"
      STORAGE_FORCE_PATH_STYLE: "true"
      STORAGE_TIMEOUT_MS: "1800"

      # ========= LOG / NÍVEL =========
      LOG_LEVEL: "debug"
      UNO_LOG_LEVEL: "debug"

      # ========= FILTROS / IGNORE =========
      IGNORE_GROUP_MESSAGES: "true"
      IGNORE_BROADCAST_STATUSES: "true"
      IGNORE_OWN_MESSAGES: "false"
      IGNORE_STATUS_MESSAGE: "true"
      IGNORE_YOURSELF_MESSAGES: "false"
      IGNORE_HISTORY_MESSAGES: "true"
      IGNORE_BROADCAST_MESSAGES: "true"
      COMPOSING_MESSAGE: "true"

      # ========= COMPORTAMENTO / AUTO-CONNECT =========
      REJECT_CALLS: "Oi, não consigo atender ligações..."
      REJECT_CALLS_WEBHOOK: "Eu estava te ligando no WhatsApp..."
      SEND_CONNECTION_STATUS: "true"
      AUTO_CONNECT: "true"
      CLEAN_CONFIG_ON_DISCONNECT: "true"
      UNOAPI_RETRY_REQUEST_DELAY_MS: "10000"
      UNOAPI_DELAY_AFTER_FIRST_MESSAGE_MS: "800"
      UNOAPI_DELAY_BETWEEN_MESSAGES_MS: "20"
      CONSUMER_TIMEOUT_MS: "450000"
      CONFIG_SESSION_PHONE_CLIENT: "Unoapi"
      CONFIG_SESSION_PHONE_NAME: "Chrome"

      # ========= ENVS NOVAS (opcionais, exemplos) =========
      # ONE_TO_ONE_PREASSERT_ENABLED: "true"
      # DELIVERY_WATCHDOG_ENABLED: "true"
      # LID_RESOLVER_ENABLED: "true"
      # ONE_TO_ONE_ADDRESSING_MODE: "pn"
      # WEBHOOK_PREFER_PN_OVER_LID: "true"
      HISTORY_MAX_AGE_DAYS: "1"
      DOWNLOAD_AUDIO_CONVERT_TO_MP3: "true"
      # GROUP_SEND_PREASSERT_SESSIONS: "false"

    entrypoint: ["yarn", "cloud"]
    restart: always
    networks:
      - unoapi

  ## --------------------------- RabbitMQ --------------------------- ##
  unoapi-rabbitmq:
    image: rabbitmq:4.0.9-management-alpine
    container_name: unoapi-rabbitmq
    hostname: unoapi-rabbitmq
    restart: always
    networks:
      - unoapi
    environment:
      RABBITMQ_DEFAULT_USER: "seu_usuario_rabbit"
      RABBITMQ_DEFAULT_PASS: "seu_password_rabbit"
    volumes:
      - rabbitmq:/var/lib/rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"   # painel web (opcional, não exponha em produção)

  ## --------------------------- Redis --------------------------- ##
  unoapi-redis:
    image: redis:7-alpine
    container_name: unoapi-redis
    restart: always
    networks:
      - unoapi
    command: ["redis-server", "--requirepass", "sua_senha_redis"]
    volumes:
      - redis:/data
    ports:
      - "6379:6379"

  ## --------------------------- MinIO (S3 compatível) --------------------------- ##
  minio:
    image: quay.io/minio/minio:latest
    container_name: unoapi-minio
    command: server /data --address ":9000" --console-address ":9001"
    volumes:
      - minio:/data
    restart: always
    environment:
      MINIO_ROOT_USER: "seu_usuario_s3"
      MINIO_ROOT_PASSWORD: "sua_senha_s3"
    ports:
      - "9000:9000"   # API S3 compatível
      - "9001:9001"   # Console web
    networks:
      - unoapi

  minio-mc:
    image: quay.io/minio/mc:latest
    container_name: unoapi-minio-mc
    restart: "no"
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "
      /usr/bin/mc alias set local http://minio:9000 seu_usuario_s3 sua_senha_s3;
      /usr/bin/mc mb local/seu_bucket_unoapi || true;
      "
    networks:
      - unoapi

volumes:
  rabbitmq:
  redis:
  minio:

networks:
  unoapi:
    driver: bridge

