# Multi-stage lightweight Docker image for Fridger
FROM node:22-alpine AS runner

# Create app directory
WORKDIR /app

# Set environment
ENV NODE_ENV=production \
    PORT=3000 \
    FRIDGER_DATA_DIR=/data \
    FRIDGER_DB_PATH=/data/fridger.db

# Install dependencies first for layer caching
COPY package.json package-lock.json ./
RUN npm ci --omit=dev && npm cache clean --force

# Copy application source
COPY server.js db.js barcode.js ./
COPY public/ ./public/

# Setup persistent data storage directory with proper permissions
RUN mkdir -p /data && chown -R node:node /app /data

# Use non-root user
USER node

# Expose web port
EXPOSE 3000

# Declare persistent volume
VOLUME ["/data"]

# Health check
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
  CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1

# Start the application
CMD ["node", "server.js"]
