# Image de production : l'application Next.js (site, API, jobs, migrations). Voir DEPLOY.md.
# Les variables NEXT_PUBLIC_* sont figées à la COMPILATION (elles partent dans le navigateur) : les passer en --build-arg (voir deploy/docker-compose.prod.yml).
FROM node:24-bookworm-slim

ENV NEXT_TELEMETRY_DISABLED=1
WORKDIR /app

# Dépendances d'abord (couche mise en cache tant que package*.json ne change pas). `postinstall` copie le worker de la carte : il lui faut `scripts/`.
COPY package.json package-lock.json ./
COPY scripts/copy-maplibre-worker.mjs scripts/copy-maplibre-worker.mjs
RUN npm ci

COPY . .

ARG NEXT_PUBLIC_MAP_STYLE_URL=
ARG NEXT_PUBLIC_MAP_STYLE_URL_DARK=
ARG NEXT_PUBLIC_SATELLITE_TILES=
ARG NEXT_PUBLIC_SATELLITE_ATTRIBUTION=
ARG NEXT_PUBLIC_MEDIA_ENABLED=
ARG NEXT_PUBLIC_SITE_URL=
ARG NEXT_PUBLIC_PUBLISHER_NAME=
ARG NEXT_PUBLIC_PUBLISHER_ADDRESS=
ARG NEXT_PUBLIC_CONTACT_EMAIL=
ENV NEXT_PUBLIC_MAP_STYLE_URL=$NEXT_PUBLIC_MAP_STYLE_URL \
    NEXT_PUBLIC_MAP_STYLE_URL_DARK=$NEXT_PUBLIC_MAP_STYLE_URL_DARK \
    NEXT_PUBLIC_SATELLITE_TILES=$NEXT_PUBLIC_SATELLITE_TILES \
    NEXT_PUBLIC_SATELLITE_ATTRIBUTION=$NEXT_PUBLIC_SATELLITE_ATTRIBUTION \
    NEXT_PUBLIC_MEDIA_ENABLED=$NEXT_PUBLIC_MEDIA_ENABLED \
    NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL \
    NEXT_PUBLIC_PUBLISHER_NAME=$NEXT_PUBLIC_PUBLISHER_NAME \
    NEXT_PUBLIC_PUBLISHER_ADDRESS=$NEXT_PUBLIC_PUBLISHER_ADDRESS \
    NEXT_PUBLIC_CONTACT_EMAIL=$NEXT_PUBLIC_CONTACT_EMAIL

RUN npm run build

ENV NODE_ENV=production PORT=3000
EXPOSE 3000
# Utilisateur sans privilèges.
RUN chown -R node:node /app/.next
USER node
HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=3 CMD node -e "fetch('http://127.0.0.1:3000/api/events').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
CMD ["npm", "run", "start"]
