# ── Stage 1: Build FFmpeg with DeckLink support ─────────────────────────────
FROM debian:bookworm AS ffmpeg-builder

RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential nasm yasm pkg-config git ca-certificates python3 \
    libssl-dev libx264-dev libx265-dev libvpx-dev libopus-dev \
    libmp3lame-dev libsrt-openssl-dev \
    libzmq3-dev zlib1g-dev libstdc++-12-dev \
  && rm -rf /var/lib/apt/lists/*

# Copy in BMD DeckLink SDK headers and patch script
COPY sdk/ /decklink-sdk/
COPY patch_decklink.py /patch_decklink.py
COPY decklink-sdk16.patch /decklink-sdk16.patch

# Pull FFmpeg 7.1 source
RUN git clone --depth=1 --branch release/7.1 https://git.ffmpeg.org/ffmpeg.git /ffmpeg

# Patch FFmpeg DeckLink code for SDK 16.x API changes
RUN python3 /patch_decklink.py

WORKDIR /ffmpeg
RUN ./configure \
      --prefix=/usr/local \
      --enable-gpl \
      --enable-nonfree \
      --enable-libx264 \
      --enable-libx265 \
      --enable-libvpx \
      --enable-libopus \
      --enable-libmp3lame \
      --enable-libsrt \
      --enable-libzmq \
      --enable-decklink \
      --extra-cflags="-I/decklink-sdk" \
      --disable-doc \
      --disable-debug \
      --disable-ffplay \
  && make -j$(nproc) \
  && make install

# ── Stage 2: Runtime image ───────────────────────────────────────────────────
FROM node:20-bookworm

# Runtime deps for compiled ffmpeg libs
RUN apt-get update && apt-get install -y --no-install-recommends \
    libx264-164 libx265-199 libvpx7 libopus0 libmp3lame0 \
    libsrt1.5-openssl libzmq5 libstdc++6 libc++1 libc++abi1 \
  && rm -rf /var/lib/apt/lists/*

# Copy compiled ffmpeg/ffprobe
COPY --from=ffmpeg-builder /usr/local/bin/ffmpeg  /usr/local/bin/ffmpeg
COPY --from=ffmpeg-builder /usr/local/bin/ffprobe /usr/local/bin/ffprobe
COPY --from=ffmpeg-builder /usr/local/lib/        /usr/local/lib/

# DeckLink runtime .so
COPY lib/libDeckLinkAPI.so        /usr/lib/libDeckLinkAPI.so
COPY lib/libDeckLinkPreviewAPI.so /usr/lib/libDeckLinkPreviewAPI.so
RUN ldconfig

WORKDIR /app
COPY package*.json ./
RUN npm install --omit=dev
COPY . .

EXPOSE 3001
CMD ["node", "src/index.js"]
