# cuda-grid-controller — Python sidecar для vf_cuda_grid filter.

FROM python:3.11-slim AS base

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PIP_NO_CACHE_DIR=1

WORKDIR /app

# ffmpeg для snapshot endpoint — нужен basic CPU build (RTSP read + PNG output).
# Размер: ~120 MB additional (ffmpeg + libs); приемлемо для controller image.
RUN apt-get update && apt-get install -y --no-install-recommends \
        ffmpeg \
    && rm -rf /var/lib/apt/lists/*

# Install deps первым layer — пересборка только при изменении pyproject.toml
COPY pyproject.toml ./
RUN pip install --no-cache-dir \
    fastapi \
    "uvicorn[standard]" \
    pydantic \
    pydantic-settings \
    aiomqtt \
    pyzmq \
    pyyaml \
    structlog \
    typer \
    sse-starlette \
    pillow \
    httpx \
    playwright

# Playwright headless Chromium для browser-rendered overlays (Grafana, чаты).
# install-deps добавляет system libs (libnss3, libxkbcommon0, libgbm1...).
# Chromium ~170 MB + system deps ~150 MB. Можно отключить если dashboards
# не нужны: убрать `playwright` из pip и закомментировать ниже.
RUN playwright install --with-deps chromium

# Source code
COPY cuda_grid_controller ./cuda_grid_controller
COPY examples ./examples

RUN pip install --no-cache-dir -e .

EXPOSE 8080
ENTRYPOINT ["cuda-grid-controller"]
CMD ["--config", "/app/controller.yaml"]
