# ── Stage 1 : Builder — installe les dépendances Python
FROM python:3.12-slim AS builder

WORKDIR /build

# Copier requirements en premier pour maximiser le cache Docker
COPY requirements.txt .

RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir --target=/build/packages -r requirements.txt

# ── Stage 2 : Runtime — image finale légère
FROM python:3.12-slim AS runtime

LABEL maintainer="Formation Python Backend" \
      version="1.0.0" \
      description="TaskAPI FastAPI — Production Ready"

# Variables d'environnement Python optimales pour les conteneurs
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PYTHONPATH=/app/packages \
    PORT=8000

WORKDIR /app

# Copier les packages installés depuis le builder
COPY --from=builder /build/packages /app/packages

# Créer un utilisateur non-root (bonne pratique sécurité)
RUN addgroup --system appgroup && \
    adduser --system --ingroup appgroup --no-create-home appuser

# Copier le code source avec les bons droits
COPY --chown=appuser:appgroup . .

# Basculer vers l'utilisateur non-root
USER appuser

EXPOSE 8000

# Healthcheck — vérifie que l'API répond
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
    CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1

# Commande de démarrage — uvicorn (dev) ou gunicorn (prod)
CMD ["python", "-m", "uvicorn", "main:app", \
     "--host", "0.0.0.0", \
     "--port", "8000", \
     "--workers", "1"]

# Pour la production avec Gunicorn :
# CMD ["python", "-m", "gunicorn", "main:app", \
#      "--workers", "4", \
#      "--worker-class", "uvicorn.workers.UvicornWorker", \
#      "--bind", "0.0.0.0:8000"]
