# ============================================================================
#  Brimoza — web paneli + bot (tek imaj)
#  Bot, panelden (BotManager) aynı süreçte bir thread'de başlatılır.
#  Çalışma: docker compose up   (PostgreSQL + panel)  — bkz. docker-compose.yml
# ============================================================================
FROM python:3.10-slim

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PIP_NO_CACHE_DIR=1

WORKDIR /app

# Sağlık kontrolü için curl. (numpy/pandas/psycopg2-binary manylinux wheel kullanır,
# derleyici gerekmez -> imaj yalın kalır.)
RUN apt-get update \
 && apt-get install -y --no-install-recommends curl \
 && rm -rf /var/lib/apt/lists/*

# Önce bağımlılıklar (katman önbelleği: kod değişince pip tekrar koşmaz).
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Uygulama kodu (gizli dosyalar .dockerignore ile DIŞARIDA tutulur; .env GÖMÜLMEZ).
COPY coinbot ./coinbot
COPY webapp ./webapp
COPY scripts ./scripts
COPY config.yaml config.testnet-soak.yaml VERSION ./

# Kalıcı veriler (volume mount edilir).
RUN mkdir -p state logs

# Root olmayan kullanıcı (güvenlik).
RUN useradd -m -u 10001 coinbot && chown -R coinbot:coinbot /app
USER coinbot

EXPOSE 8787

# Panel ayakta mı? /login auth gerektirmez (200 ya da 303 -> sağlıklı).
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
  CMD curl -fsS http://127.0.0.1:8787/login >/dev/null || exit 1

# Varsayılan: web paneli. Auth (parola/admin/token) ayarlı değilse uygulama
# fail-closed başlamaz (kazara kimlik-doğrulamasız açılmaz). --proxy-headers:
# TLS ters-vekil arkasında doğru şema/IP.
#
# GÜVENLİK: forwarded-allow-ips VARSAYILAN 127.0.0.1'dir; '*' DEĞİL. '*' ile her istemci
# X-Forwarded-For'u spoof edip kaba-kuvvet kilidini atlatabilir ve sahte HTTPS şeması
# bildirebilir. Önünde GÜVENİLİR bir ters-vekil (Caddy/Nginx) varsa, onun erişim IP'sini
# (docker ağ geçidi/subnet) FORWARDED_ALLOW_IPS env'i ile ver — '*' kullanma.
ENV FORWARDED_ALLOW_IPS=127.0.0.1
CMD ["sh", "-c", "exec python -m uvicorn webapp.server:app --host 0.0.0.0 --port 8787 --proxy-headers --forwarded-allow-ips \"$FORWARDED_ALLOW_IPS\""]
