# syntax=docker/dockerfile:1

# Builder stage
FROM debian:trixie-slim AS builder

# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    cmake \
    git \
    curl \
    ca-certificates \
    libtool \
    autoconf \
    automake \
    pkg-config \
    bison \
    flex \
    libzstd-dev \
    liblz4-dev \
    libcap-dev \
    libzmq3-dev \
    liburing-dev \
    libssl-dev \
    libcurl4-openssl-dev \
    libffi-dev \
    zlib1g-dev \
    libfuse3-dev \
    python3 \
    perl \
    patch \
    && rm -rf /var/lib/apt/lists/*

# Set up environment variables for the build
ENV GKFS_PATH=/usr/local/gekkofs
ENV GKFS_DEPS_PATH=/usr/local/gekkofs_deps
ENV GKFS_SRC=/usr/src/gekkofs
ENV LD_LIBRARY_PATH=${GKFS_DEPS_PATH}/lib:${GKFS_DEPS_PATH}/lib64:${LD_LIBRARY_PATH:-}
ENV LIBRARY_PATH=${GKFS_DEPS_PATH}/lib:${GKFS_DEPS_PATH}/lib64:${LIBRARY_PATH:-}


# Create directories
RUN mkdir -p ${GKFS_DEPS_PATH} ${GKFS_SRC}

# Copy scripts and source
COPY scripts ${GKFS_SRC}/scripts

# Build dependencies
# We use the default profile but might need to adjust if specific versions are required.
# Assuming compile_dep.sh handles downloading/building dependencies.
WORKDIR ${GKFS_SRC}
RUN scripts/dl_dep.sh \
    -P ${GKFS_SRC}/scripts/profiles \
    -p docker:latest \
    /usr/src/gekkofs_deps_src

RUN scripts/compile_dep.sh \
    -P ${GKFS_SRC}/scripts/profiles \
    -p docker:latest \
    -j $(nproc) \
    /usr/src/gekkofs_deps_src \
    ${GKFS_DEPS_PATH}

# Copy rest of source (invalidates cache for GekkoFS build only)
COPY . ${GKFS_SRC}

# Build GekkoFS
WORKDIR ${GKFS_SRC}/build
RUN cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_PREFIX_PATH=${GKFS_DEPS_PATH} \
    -DCMAKE_INSTALL_PREFIX=${GKFS_PATH} \
    -DGKFS_ENABLE_ROCKSDB=ON \
    -DGKFS_ENABLE_PROMETHEUS=ON \
    -DGKFS_ENABLE_CLIENT_METRICS=ON \
    -DGKFS_BUILD_TESTS=OFF \
    -DGKFS_INSTALL_TESTS=OFF \
    -DGKFS_BUILD_EXAMPLES=OFF \
    .. && \
    make -j$(nproc) && \
    make install

# Runtime stage
FROM debian:trixie-slim

# Install runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    libstdc++6 \
    libgcc-s1 \
    libcurl4 \
    liblz4-1 \
    libzstd1 \
    libcap2 \
    libzmq5 \
    liburing2 \
    fuse3 \
    && rm -rf /var/lib/apt/lists/*

# Copy GekkoFS artifacts
COPY --from=builder /usr/local/gekkofs /usr/local/gekkofs
COPY --from=builder /usr/local/gekkofs_deps/lib /usr/local/gekkofs_deps/lib

# Set up environment variables
ENV LD_LIBRARY_PATH=/usr/local/gekkofs/lib:/usr/local/gekkofs_deps/lib:/usr/local/lib
ENV PATH=/usr/local/gekkofs/bin:${PATH}

# Default command
CMD ["gkfs_daemon", "--help"]
