FROM node:alpine AS build
WORKDIR /build

RUN apk update --no-cache && apk upgrade --no-cache
RUN apk add --no-cache cmake ninja clang alpine-sdk yaml-dev brotli-dev json-c-dev util-linux-dev ffmpeg-dev

RUN git clone https://tuxist.de/git/jan.koester/libcmdplus.git && \
    mkdir libcmdplus/build && \
    cd libcmdplus/build && cmake ../ -G Ninja -DCMAKE_CXX_FLAGS="-fPIC" && ninja install

RUN git clone https://tuxist.de/git/tuxist/uuidplus.git && \
    mkdir uuidplus/build && \
    cd uuidplus/build && cmake ../ -G Ninja && ninja install

RUN git clone https://tuxist.de/git/jan.koester/libnetplus.git && \
    mkdir libnetplus/build && \
    cd libnetplus/build && cmake ../ -G Ninja && ninja install

RUN git clone https://tuxist.de/git/jan.koester/libhtmlpp.git && \
    mkdir libhtmlpp/build && \
    cd libhtmlpp/build && cmake ../ -G Ninja && ninja install

RUN git clone https://tuxist.de/git/jan.koester/libhttppp.git && \
    mkdir libhttppp/build && \
    cd libhttppp/build && cmake ../ -G Ninja && ninja install

RUN git clone https://tuxist.de/git/jan.koester/libconfplus.git && \
    mkdir libconfplus/build && \
    cd libconfplus/build && cmake ../ -G Ninja -DCMAKE_CXX_FLAGS="-fPIC" && ninja install

RUN git clone https://tuxist.de/git/tuxist/libparitypp.git && \
    mkdir libparitypp/build && \
    cd libparitypp/build && cmake ../ -G Ninja && ninja install

RUN git clone https://tuxist.de/git/jan.koester/authdb.git && \
    mkdir authdb/build && \
    cd authdb/build && cmake ../ -G Ninja -DBUILD_BINDINGS=OFF -DDATAPATH:PATH=/usr/local/share/authdb && ninja install

RUN git clone https://tuxist.de/git/tuxist/mediadb.git && \
    mkdir mediadb/build && \
    cd mediadb/build && cmake ../ -G Ninja && ninja install

# --- Runtime stage ---
FROM node:alpine

RUN addgroup mediadb --system && \
    adduser mediadb -h /var/lib/mediadb -S -G mediadb

RUN apk update && apk upgrade && \
    apk add --no-cache yaml brotli openssl json-c libuuid libstdc++ ffmpeg

RUN mkdir -p /etc/mediadb/certs /var/lib/mediadb /usr/share/mediadb && \
    chown -R mediadb:mediadb /var/lib/mediadb

COPY --from=build /usr/local/bin/mediadb /usr/local/bin/
COPY --from=build /usr/local/lib /usr/local/lib/
COPY --from=build /usr/local/share/mediadb /usr/share/mediadb/

# Ports: 8080 = HTTP API, 4433 = cluster QUIC
EXPOSE 8080 4433

CMD ["mediadb", "-f", "true", "-c", "yaml:///etc/mediadb/config.yaml"]
