# Многоступенчатая сборка для оптимизации размера образа

# Этап 1: Сборка зависимостей
FROM python:3.12-slim AS builder

WORKDIR /app

# Устанавливаем системные зависимости для сборки
RUN apt-get update && apt-get install -y \
    gcc \
    build-essential \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# Устанавливаем uv для управления зависимостями
RUN pip install uv

# Копируем файлы зависимостей
COPY pyproject.toml uv.lock* ./

# Устанавливаем зависимости
RUN uv sync --frozen

# Этап 2: Производственный образ
FROM python:3.12-slim AS production

WORKDIR /app

# Устанавливаем только необходимые runtime зависимости
RUN apt-get update && apt-get install -y \
    libpq5 \
    postgresql-client \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean

# Копируем установленные зависимости из builder stage
COPY --from=builder /app/.venv /app/.venv

# Копируем исходный код приложения (единое приложение с API и database)
COPY api/ ./api/
COPY database/ ./database/
COPY run_api.py ./
COPY pyproject.toml ./

# Создаем непривилегированного пользователя для безопасности
RUN groupadd -r appuser && useradd -r -g appuser -s /bin/bash appuser
RUN chown -R appuser:appuser /app
USER appuser

# Открываем порт для API
EXPOSE 8000

# Устанавливаем переменные окружения
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/.venv/bin:$PATH"

# Проверка здоровья контейнера
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
    CMD python -c "import requests; requests.get('http://localhost:8000/health')" || exit 1

# Команда для запуска единого приложения (API + database логика)
CMD ["python", "run_api.py"]