# Multi-stage build for FFmpeg with CUDA/NVENC support on Debian 12
FROM debian:12-slim as builder

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
    wget ca-certificates gnupg build-essential git pkg-config \
    yasm nasm cmake libnuma-dev && rm -rf /var/lib/apt/lists/*

# Add NVIDIA CUDA APT repo (Debian 12) and update
RUN wget -O /tmp/cuda-keyring.deb \
    https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb && \
    dpkg -i /tmp/cuda-keyring.deb && rm -f /tmp/cuda-keyring.deb && \
    apt-get update

# Install minimal CUDA toolkit components (only what we need for compilation)
RUN apt-get install -y --no-install-recommends \
    cuda-nvcc-12-4 cuda-cudart-dev-12-4 cuda-driver-dev-12-4 \
    libnpp-dev-12-4 || \
    apt-get install -y --no-install-recommends \
    cuda-nvcc cuda-cudart-dev cuda-driver-dev libnpp-dev

# Set CUDA environment variables
ENV PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
ENV CUDA_PATH=/usr/local/cuda
ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
ENV LIBRARY_PATH=/usr/local/cuda/lib64${LIBRARY_PATH:+:${LIBRARY_PATH}}

# NVENC headers
RUN git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git /tmp/nv-codec-headers && \
    make -C /tmp/nv-codec-headers install && rm -rf /tmp/nv-codec-headers

# Build FFmpeg with optimizations for size
RUN git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git /tmp/ffmpeg-src && \
    cd /tmp/ffmpeg-src && \
    ./configure \
      --enable-nonfree \
      --enable-cuda-nvcc --enable-libnpp \
      --enable-nvenc --enable-nvdec \
      --enable-cuvid --enable-cuda-llvm \
      --extra-cflags="-I/usr/local/cuda/include" \
      --extra-ldflags="-L/usr/local/cuda/lib64" \
      --nvccflags="-gencode arch=compute_50,code=sm_50 -O2" \
      --enable-gpl --enable-version3 \
      --disable-static --enable-shared \
      --disable-debug --disable-doc --disable-htmlpages --disable-manpages \
      --disable-avdevice --disable-devices \
      --disable-network --disable-protocols --enable-protocol=file \
      --disable-filters --enable-filter=scale,scale_cuda,colorspace_cuda,tonemap \
      --disable-encoders --enable-encoder=h264_nvenc,hevc_nvenc,av1_nvenc \
      --disable-decoders --enable-decoder=h264,hevc,h264_cuvid,hevc_cuvid && \
    make -j"$(nproc)" install && ldconfig && \
    rm -rf /tmp/ffmpeg-src

# Create a minimal runtime image
FROM debian:12-slim as runtime

# Install only runtime CUDA libraries
RUN apt-get update && apt-get install -y --no-install-recommends \
    wget ca-certificates gnupg && \
    wget -O /tmp/cuda-keyring.deb \
    https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb && \
    dpkg -i /tmp/cuda-keyring.deb && rm -f /tmp/cuda-keyring.deb && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
    cuda-cudart-12-4 libnpp-12-4 || \
    apt-get install -y --no-install-recommends \
    cuda-cudart libnpp && \
    rm -rf /var/lib/apt/lists/* /tmp/*

# Set runtime environment variables
ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

# Copy only the built FFmpeg from builder stage
COPY --from=builder /usr/local/bin/ffmpeg /usr/local/bin/
COPY --from=builder /usr/local/bin/ffprobe /usr/local/bin/
COPY --from=builder /usr/local/lib/libav*.so* /usr/local/lib/
COPY --from=builder /usr/local/lib/libsw*.so* /usr/local/lib/
COPY --from=builder /usr/local/include/ffnvcodec /usr/local/include/ffnvcodec

# Update library cache
RUN ldconfig

# Create minimal package
RUN mkdir -p /artifacts && \
    tar -czf /artifacts/ffmpeg-cuda-debian12.tgz \
    /usr/local/bin/ffmpeg \
    /usr/local/bin/ffprobe \
    /usr/local/lib/libav*.so* \
    /usr/local/lib/libsw*.so*