# Build stage
FROM rust:latest AS builder

# Install build dependencies for nokhwa (v4l2) and bindgen (clang)
RUN apt-get update && apt-get install -y \
    libv4l-dev \
    libudev-dev \
    pkg-config \
    clang \
    libclang-dev \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy manifests first for better caching
COPY Cargo.toml Cargo.lock ./

# Create dummy src to cache dependencies
RUN mkdir src && echo "fn main() {}" > src/main.rs
RUN cargo build --release && rm -rf src target/release/deps/camera_trng*

# Copy actual source and build
COPY src ./src
RUN cargo build --release

# Runtime stage - minimal image
FROM debian:bookworm-slim

# Install runtime dependencies for v4l2 camera access
RUN apt-get update && apt-get install -y \
    libv4l-0 \
    && rm -rf /var/lib/apt/lists/*

# Create non-root user
RUN useradd -m -u 1000 trng

WORKDIR /app

# Copy binary from builder
COPY --from=builder /app/target/release/camera-trng .

# Set ownership
RUN chown -R trng:trng /app

USER trng

ENV PORT=8787

EXPOSE 8787

CMD ["./camera-trng"]
