# ---------------------------------------------------------------------------
# Étape 1 — dépendances Python via uv (cache couche par couche)
# ---------------------------------------------------------------------------
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS builder
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy
WORKDIR /opt/ohm

# D'abord les métadonnées seules : couche réutilisable tant que uv.lock ne bouge pas
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev --no-install-project --no-cache

# Puis le code
COPY app ./app
RUN uv sync --frozen --no-dev --no-cache

# ---------------------------------------------------------------------------
# Étape 2 — image d'exécution minimale
# ---------------------------------------------------------------------------
FROM python:3.13-slim-bookworm

LABEL org.opencontainers.image.source="https://git.lanro.eu/Roman/ohm_streaming" \
      org.opencontainers.image.description="Ohm Stream Downloader — outil technique d'automatisation, ne fournit ni n'héberge aucun contenu. L'usage relève de la seule responsabilité de l'utilisateur (droit d'auteur)."
# ffmpeg (téléchargements HLS), ca-certificates (scraping HTTPS),
# gosu (bascule utilisateur non-root dans l'entrypoint)
RUN apt-get update \
    && apt-get install -y --no-install-recommends ffmpeg ca-certificates gosu \
    && rm -rf /var/lib/apt/lists/*

# Utilisateur non-root
RUN useradd --create-home --uid 1000 ohm

WORKDIR /opt/ohm
COPY --from=builder --chown=ohm:ohm /opt/ohm/.venv ./.venv
COPY --chown=ohm:ohm app ./app
COPY --chown=ohm:ohm docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

ENV PATH="/opt/ohm/.venv/bin:$PATH" \
    PYTHONUNBUFFERED=1 \
    # Chemins montés en volumes par docker-compose
    OHM_DATA_DIR=/data \
    OHM_DOWNLOAD_DIR=/downloads \
    OHM_DATABASE_PATH=/data/ohm.db

# Version cuite dans l'image par scripts/release.sh (build-arg VERSION)
ARG VERSION=dev
ENV OHM_VERSION=${VERSION}

RUN mkdir -p /data /downloads && chown -R ohm:ohm /opt/ohm /data /downloads
# Root par défaut : l'entrypoint chown les volumes puis passe en « ohm »

EXPOSE 8777

HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
    CMD ["python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8777/health', timeout=4)"]

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8777"]
