# ==============================================================================
# NX9 WireGuard - Multi-Stage Container Image
# ==============================================================================

# ── Stage 1: Build binary in Rust environment ────────────────────────────────
FROM rust:1.97-bookworm AS builder

WORKDIR /usr/src/nx9-wg

# Copy manifests and source tree
COPY Cargo.toml Cargo.lock ./
COPY crates ./crates
COPY src ./src

# Build release binary with optimization
RUN cargo build --release --bin nx9-wg

# ── Stage 2: Minimal runtime image ──────────────────────────────────────────
FROM debian:bookworm-slim

# Install only essential runtime dependencies (ca-certificates for HTTPS/TLS)
RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# Copy compiled binary from builder
COPY --from=builder /usr/src/nx9-wg/target/release/nx9-wg /usr/local/bin/nx9-wg

# Create state and configuration directories
RUN mkdir -p /var/lib/nx9-wg /etc/nx9-wg /var/lib/nx9-wg/backups

# Expose API/WebSocket port and default WireGuard UDP listen port
EXPOSE 8080 51820/udp

# Environment defaults
ENV NX9_WG_DATA_DIR=/var/lib/nx9-wg
ENV NX9_WG_LOG_LEVEL=info

# Healthcheck against Axum public health endpoint
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
    CMD ["/usr/local/bin/nx9-wg", "system", "health"] || exit 1

ENTRYPOINT ["/usr/local/bin/nx9-wg"]
CMD ["serve", "--bind", "0.0.0.0:8080"]
