# DXA Quality Assessment - Docker Container (GPU / CUDA)
# Build: docker build -f Dockerfile_cuda -t dxa-quality-cuda .
# Run:   docker run --gpus all -v /path/to/data:/data -v /path/to/models:/app/models \
#            -p 8000:8000 dxa-quality-cuda

# Base image with GPU support
FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04

# Неинтерактивный режим для apt
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    python3.10 \
    python3-pip \
    python3.10-dev \
    python3.10-venv \
    build-essential \
    ninja-build \
    libgl1-mesa-glx \
    libglib2.0-0 \
    libsm6 \
    libxext6 \
    libxrender1 \
    libgomp1 \
    && rm -rf /var/lib/apt/lists/*

# Обновляем pip и ставим свежий meson (0.64.0+) — ДО всех Python-пакетов
RUN pip3 install --no-cache-dir --upgrade pip "meson>=0.64.0"

WORKDIR /app

# --- PyTorch под CUDA 11.8 (ставим отдельно, чтобы не тянулся CUDA 12.6) ---
RUN pip3 install --no-cache-dir \
    torch==2.8.0 torchvision==0.23.0 \
    --index-url https://download.pytorch.org/whl/cu118

# --- Остальные зависимости ---
# Список версий один на оба образа: requirements.txt. Уже установленный torch
# pip не переустановит — версия из cu118 удовлетворяет требованию.
COPY requirements.txt ./
RUN pip3 install --no-cache-dir -r requirements.txt

# --- Код приложения ---
COPY src ./src
COPY run.sh ./run.sh
RUN chmod +x ./run.sh
RUN mkdir -p models

# Smoke-проверка импорта: падает на сборке, если зависимость недоступна или
# модуль не найден, вместо тихой 500-й в рантайме. Чекпоинт здесь не читается.
RUN python3 -c "import src.main; print('app import ok')"

# --- Проверка статики для офлайн-работы ---
# Tailwind и FontAwesome лежат в src/api/static, обращений к CDN быть не должно.
RUN python3 -c "import os; \
    files=['src/api/static/vendor/tailwind.js','src/api/static/vendor/fontawesome.css', \
           'src/api/static/webfonts/fa-solid-900.woff2']; \
    missing=[f for f in files if not os.path.exists(f)]; \
    assert not missing, f'missing frontend assets: {missing}'; \
    print('frontend assets ok')"

# Expose API port
EXPOSE 8000

# Environment variables
ENV PYTHONUNBUFFERED=1 \
    PYTHONPATH=/app \
    DXA_MODEL_PATH=/app/models/dxa_model.pth

# Default command
CMD ["python3", "-m", "uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]
