########################################
# EVOLV — Node-RED Development Image
########################################
FROM nodered/node-red:latest

# Install curl for health checks
USER root
RUN apk add --no-cache curl
USER node-red

# Set working directory to the EVOLV bind mount location
WORKDIR /data/evolv

# -------------------------------------------------------
# Layer-cache: copy dependency manifests first
# -------------------------------------------------------
COPY --chown=node-red:node-red package.json package-lock.json* ./

# Copy generalFunctions early (it's a file: dependency)
COPY --chown=node-red:node-red nodes/generalFunctions/ ./nodes/generalFunctions/

# Install dependencies — skip scripts to avoid unused TensorFlow native build
RUN npm install --ignore-scripts

# Install Node-RED palette nodes used by demo flows
RUN cd /usr/src/node-red && npm install @flowfuse/node-red-dashboard

# -------------------------------------------------------
# Copy entrypoint and settings
# -------------------------------------------------------
COPY --chown=node-red:node-red docker/entrypoint.sh /data/evolv/docker/entrypoint.sh
COPY --chown=node-red:node-red docker/settings.js /data/evolv/docker/settings.js

# -------------------------------------------------------
# Health check: Node-RED admin API
# -------------------------------------------------------
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \
    CMD curl -sf http://localhost:1880/nodes || exit 1

# -------------------------------------------------------
# Entrypoint
# -------------------------------------------------------
ENTRYPOINT ["sh", "/data/evolv/docker/entrypoint.sh"]
