# ============================================================
# Dockerfile — Intranet CHK 2.0
# Build multi-étapes : build React + serve via Node/Express
# ============================================================

# ---- Étape 1 : Build de l'application React ----
FROM node:22-alpine AS builder

# Installer pnpm
RUN npm install -g pnpm@10.4.1

WORKDIR /app

# Copier les fichiers de dépendances
COPY package.json pnpm-lock.yaml ./
COPY patches/ ./patches/

# Installer les dépendances
RUN pnpm install --frozen-lockfile

# Copier le reste du code source
COPY . .

# Variables d'environnement de build (surchargeables via --build-arg)
ARG VITE_APP_TITLE="Intranet CHK — Centre Hospitalier de Kourou"
ARG VITE_APP_ID="chk-intranet"

ENV VITE_APP_TITLE=$VITE_APP_TITLE
ENV VITE_APP_ID=$VITE_APP_ID

# Build de production
RUN pnpm build

# ---- Étape 2 : Image de production légère ----
FROM node:22-alpine AS production

WORKDIR /app

# Installer pnpm
RUN npm install -g pnpm@10.4.1

# Copier uniquement les fichiers nécessaires à l'exécution
COPY package.json pnpm-lock.yaml ./
COPY patches/ ./patches/
RUN pnpm install --frozen-lockfile --prod

# Copier le build et le serveur
COPY --from=builder /app/dist ./dist
COPY server/ ./server/
COPY tsconfig.json tsconfig.node.json ./

# Compiler le serveur Express
RUN pnpm esbuild server/index.ts \
    --platform=node \
    --packages=external \
    --bundle \
    --format=esm \
    --outdir=dist

# Exposer le port
EXPOSE 3000

# Variables d'environnement de runtime
ENV NODE_ENV=production
ENV PORT=3000

# Démarrer le serveur
CMD ["node", "dist/index.js"]
