# syntax=docker/dockerfile:1.7
#
# Frontend-Image für moneyfy: Vite-Bundle bauen, mit nginx ausliefern.

# --- Abhängigkeiten -----------------------------------------------------------
FROM node:22-bookworm-slim AS deps

WORKDIR /app

# Nur die Sperrdatei kopieren – die Schicht bleibt gültig, solange sich die
# Abhängigkeiten nicht ändern.
COPY package.json package-lock.json ./
RUN npm ci --no-audit --no-fund

# --- Entwicklung --------------------------------------------------------------
# Wird von docker-compose.override.yml genutzt; der Quellcode kommt per Volume.
FROM deps AS development

ENV NODE_ENV=development
COPY . .

# Vite legt seinen Cache unter node_modules/.vite ab – der Benutzer braucht Schreibrecht.
RUN chown -R node:node /app

USER node
EXPOSE 5173
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "5173"]

# --- Bau ----------------------------------------------------------------------
FROM deps AS build

COPY . .

# `npm run build` prüft zuerst die Typen und bricht bei Fehlern ab.
RUN npm run build

# --- Auslieferung -------------------------------------------------------------
# Das unprivilegierte Image läuft als Benutzer nginx und lauscht auf 8080.
FROM nginxinc/nginx-unprivileged:1.27-alpine AS production

COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/dist /usr/share/nginx/html

EXPOSE 8080

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD wget -qO- http://127.0.0.1:8080/healthz >/dev/null || exit 1
