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

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

WORKDIR /app

# Устанавливаем uv - современный менеджер пакетов для Python
RUN pip install --no-cache-dir uv

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

# Создаем виртуальное окружение и синхронизируем зависимости
RUN uv venv /app/.venv
RUN uv sync --frozen

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

# Устанавливаем curl для healthcheck
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*

WORKDIR /app

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

# Копируем исходный код приложения
COPY app.api/ ./app.api/
COPY app.bot/ ./app.bot/
COPY app.control-bot/ ./app.control-bot/
COPY *.py ./
COPY pyproject.toml ./

# Создаем папку для изображений
RUN mkdir -p ./images

# Создаем непривилегированного пользователя для безопасности
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 VIRTUAL_ENV=/app/.venv
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/docs')" || exit 1

# Команда по умолчанию для запуска бота (можно переопределить в docker-compose)
CMD ["python", "main.py", "--mode", "bot"]