#!/usr/bin/env bash
# Inicializa o proxy de streaming da VPS (Pterodactyl).
#
# No painel do Pterodactyl -> Startup, use:
#   bash /home/container/vps/start.sh
#
# A porta NUNCA e escrita aqui: o Pterodactyl injeta SERVER_PORT no ambiente
# a cada start. Se trocar a porta principal no painel, sobe sozinho.
set -e

cd "$(dirname "$0")"

# Carrega o .env (o painel desta VPS nao tem campo de variaveis de ambiente).
# NAO usa "source": um source sobrescreveria as variaveis do painel, e uma
# linha invalida derrubaria o start por causa do set -e. Aqui so definimos o
# que ainda nao existe -> SERVER_PORT do painel sempre ganha.
if [ -f .env ]; then
  while IFS= read -r _linha || [ -n "$_linha" ]; do
    _linha="${_linha#"${_linha%%[![:space:]]*}"}"
    _linha="${_linha%"${_linha##*[![:space:]]}"}"
    case "$_linha" in
      ''|'#'*) continue ;;
    esac
    case "$_linha" in
      export\ *|EXPORT\ *) _linha="${_linha#* }" ;;
    esac
    _linha="${_linha#"${_linha%%[![:space:]]*}"}"
    case "$_linha" in
      *=*) ;;
      *) continue ;;
    esac
    _k="${_linha%%=*}"
    _v="${_linha#*=}"
    _k="$(printf '%s' "$_k" | tr -d '[:space:]')"
    case "$_k" in
      [A-Za-z_]*) ;;
      *) continue ;;
    esac
    case "$_k" in
      *[!A-Za-z0-9_]*) continue ;;
    esac
    _v="${_v#"${_v%%[![:space:]]*}"}"
    _v="${_v%"${_v##*[![:space:]]}"}"
    if [ "${#_v}" -ge 2 ]; then
      case "$_v" in
        \"*\"|\'*\') _v="${_v:1:${#_v}-2}" ;;
      esac
    fi
    if [ -z "${!_k:-}" ]; then
      export "$_k=$_v"
    fi
  done < .env
  unset _linha _k _v
fi

if [ -z "$SERVER_PORT" ]; then
  echo "[ERRO] SERVER_PORT nao definida. Suba pelo painel do Pterodactyl (Startup)."
  exit 1
fi

if [ -z "$STREAM_PROXY_SECRET" ]; then
  echo "[AVISO] STREAM_PROXY_SECRET vazia. Defina em vps/.env antes de usar de verdade."
fi

# Limite de conexoes simultaneas: a VPS tem 2 cores / 4 GB.
WORKERS="${STREAM_WORKERS:-2}"
THREADS="${STREAM_THREADS:-40}"
TIMEOUT="${STREAM_TIMEOUT:-3600}"

echo "[stream] porta=$SERVER_PORT workers=$WORKERS threads=$THREADS timeout=$TIMEOUT"

if python3 -c "import gunicorn" 2>/dev/null; then
  exec python3 -m gunicorn \
    --bind "0.0.0.0:${SERVER_PORT}" \
    --workers "${WORKERS}" \
    --threads "${THREADS}" \
    --worker-class gthread \
    --timeout "${TIMEOUT}" \
    --graceful-timeout 30 \
    --keep-alive 75 \
    --access-logfile - \
    --error-logfile - \
    --log-level info \
    stream_server:app
else
  echo "[stream] gunicorn nao encontrado; usando servidor embutido do Flask (aceita few streams so)."
  exec python3 stream_server.py
fi