# ==============================================
# Dockerfile для Django Backend (оптимизирован)
# ==============================================
# Сборка: DOCKER_BUILDKIT=1 docker build ... (BuildKit включён по умолчанию в Docker 23+)

# syntax=docker/dockerfile:1
# ------------------------------
# Базовый образ Python
# ------------------------------
ARG PYTHON_VERSION=3.11
FROM python:${PYTHON_VERSION}-slim AS base

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PIP_NO_CACHE_DIR=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1 \
    PIP_DEFAULT_TIMEOUT=100

WORKDIR /app

# Системные зависимости — один слой, очистка в том же RUN
# poppler-utils: pdftotext для конвертации PDF → txt при проверке ДЗ
RUN apt-get update && apt-get install -y --no-install-recommends \
    postgresql-client \
    gettext \
    curl \
    netcat-traditional \
    poppler-utils \
    && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*

# ==============================================
# Стадия зависимостей (кэш pip между сборками)
# ==============================================
FROM base AS dependencies

COPY requirements.txt /app/

# Кэш pip ускоряет повторные сборки при неизменных requirements
RUN --mount=type=cache,target=/root/.cache/pip \
    pip install --upgrade pip && \
    pip install -r requirements.txt

# ==============================================
# Финальная стадия
# ==============================================
FROM dependencies AS final

COPY . /app/

# Создание директорий для статики, медиа и профилей
RUN mkdir -p /app/staticfiles /app/media /app/profiles

# Создание непривилегированного пользователя
RUN useradd -m -u 1000 appuser && \
    chown -R appuser:appuser /app

# Переключение на непривилегированного пользователя
USER appuser

# Открытие порта
EXPOSE 8000

# Healthcheck
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
    CMD curl -f http://localhost:8000/health/ || exit 1

# Команда запуска (будет переопределена в docker-compose)
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "4", "--threads", "2"]

