# Production Telegram bot host descriptor (standalone — NOT an overlay). Run only on
# the bot host:
#   docker compose -f docker-compose.bot.yml up -d
#
# The bot egresses to the Bot API directly (no VPN sidecar) and dials the main host's
# published bot-link :9443 over mTLS. It exports no OTLP telemetry — otelcol lives on the
# main host and is unreachable from here — but it reports its Bot API health up the bot-link,
# which the gateway turns into metrics + alerts on the main host (docs/ARCHITECTURE.md); `docker
# logs` on this host is the local detail view.
# Values come from the prod-deploy workflow (PROD_ secrets/variables); BOT_IMAGE is the
# pushed registry tag and BOTLINK_GATEWAY_ADDR is the main host's <ip>:9443.
name: scrabble-bot

services:
  bot:
    container_name: scrabble-telegram-bot
    image: ${BOT_IMAGE:?set BOT_IMAGE to the registry tag}
    restart: unless-stopped
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    environment:
      TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:?set TELEGRAM_BOT_TOKEN}
      TELEGRAM_GAME_CHANNEL_ID: ${TELEGRAM_GAME_CHANNEL_ID:-}
      TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-}
      # Support relay: a private forum supergroup the bot relays direct user messages
      # into (one topic per user). 0/unset disables it; the bot needs admin there with
      # the manage-topics and delete-messages rights.
      TELEGRAM_SUPPORT_CHAT_ID: ${TELEGRAM_SUPPORT_CHAT_ID:-}
      TELEGRAM_SUPPORT_STATE_DIR: /data
      # The Telegram Stars payment outbox (shares the bot-state volume). A writable dir enables the
      # Stars rail; empty disables it. The rail stays inert until a chip pack carries an XTR (Stars)
      # price, so it is safe to leave on — seeding a Stars price in the admin is the real go-live.
      TELEGRAM_STARS_OUTBOX_DIR: ${TELEGRAM_STARS_OUTBOX_DIR:-/data}
      TELEGRAM_PROMO_BOT_TOKEN: ${TELEGRAM_PROMO_BOT_TOKEN:-}
      TELEGRAM_BOT_USERNAME: ${TELEGRAM_BOT_USERNAME:-}
      TELEGRAM_BOT_LINK: ${TELEGRAM_BOT_LINK:-}
      TELEGRAM_PROMO_START_PARAM: ${TELEGRAM_PROMO_START_PARAM:-}
      TELEGRAM_MINIAPP_URL: ${TELEGRAM_MINIAPP_URL:?set TELEGRAM_MINIAPP_URL}
      # Real Bot API in prod (the test contour pins TELEGRAM_TEST_ENV=true instead).
      TELEGRAM_TEST_ENV: "false"
      TELEGRAM_API_BASE_URL: ${TELEGRAM_API_BASE_URL:-}
      TELEGRAM_OWNS_UPDATES: "true"
      # Dials the main host's published bot-link. ServerName stays `gateway` (the cert
      # SAN), so TLS validation is independent of the dial address.
      TELEGRAM_GATEWAY_ADDR: ${BOTLINK_GATEWAY_ADDR:?set BOTLINK_GATEWAY_ADDR (main:9443)}
      TELEGRAM_BOTLINK_SERVER_NAME: gateway
      TELEGRAM_BOTLINK_TLS_CERT: /certs/bot.crt
      TELEGRAM_BOTLINK_TLS_KEY: /certs/bot.key
      TELEGRAM_BOTLINK_TLS_CA: /certs/ca.crt
      TELEGRAM_LOG_LEVEL: ${LOG_LEVEL:-info}
      TELEGRAM_SERVICE_NAME: scrabble-telegram-bot
      # No OTLP export: otelcol is on the main host, unreachable from here. Bot API health rides the
      # bot-link instead (the gateway exposes it as metrics); see docs/ARCHITECTURE.md.
      TELEGRAM_OTEL_TRACES_EXPORTER: none
      TELEGRAM_OTEL_METRICS_EXPORTER: none
      GOMAXPROCS: "1"
    volumes:
      - ${SCRABBLE_CONFIG_DIR:-.}/certs:/certs:ro
      # Support relay state (topic mapping, block list); survives redeploys.
      - bot-state:/data
    deploy:
      resources:
        limits:
          cpus: "1.0"
          memory: 256M

volumes:
  bot-state:
