# Stage 1: Builder
FROM python:3.12-slim AS builder

# Аргументы для сборки
ARG PIP_INDEX_URL=https://pypi.org/simple
ARG BUILD_ENV=production

WORKDIR /app

# Оптимизация слоев: сначала копируем только зависимости
COPY requirements.txt .

# Кэширование зависимостей
RUN --mount=type=cache,target=/root/.cache/pip \
    pip install --no-cache-dir \
    --index-url ${PIP_INDEX_URL} \
    -r requirements.txt

# Stage 2: Final
FROM python:3.12-slim

# Метки для трекинга
LABEL maintainer="Vic Sergeev" \
      version="1.0.0" \
      build-date="${BUILD_DATE}" \
      git-commit="${GIT_COMMIT}"

# Создание пользователя
RUN groupadd -r appuser && useradd -r -g appuser appuser

# Установка системных пакетов
RUN apt-get update && apt-get install -y \
    curl \
    tini \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Копирование зависимостей
COPY --from=builder --chown=appuser:appuser \
    /usr/local/lib/python3.12/site-packages \
    /usr/local/lib/python3.12/site-packages
COPY --from=builder --chown=appuser:appuser \
    /usr/local/bin \
    /usr/local/bin

# Копирование приложения
COPY --chown=appuser:appuser . .

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

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

# Использование tini для правильной обработки сигналов
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["python", "main.py"]