FROM node:22-alpine AS builder

WORKDIR /app

# Installer pnpm
RUN npm install -g pnpm

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

# Installer toutes les dépendances (y compris devDependencies pour le build)
RUN pnpm install --frozen-lockfile

# Copier les sources
COPY . .

# Variables d'environnement pour le build Vite (frontend)
# Ces valeurs sont overridées par les ARG du docker-compose au moment du build
ARG VITE_APP_ID=""
ARG VITE_OAUTH_PORTAL_URL=""
ARG VITE_APP_TITLE="SONUM"
ARG VITE_APP_LOGO=""
ARG VITE_ANALYTICS_ENDPOINT=""
ARG VITE_ANALYTICS_WEBSITE_ID=""
ARG VITE_FRONTEND_FORGE_API_KEY=""
ARG VITE_FRONTEND_FORGE_API_URL=""

ENV VITE_APP_ID=$VITE_APP_ID
ENV VITE_OAUTH_PORTAL_URL=$VITE_OAUTH_PORTAL_URL
ENV VITE_APP_TITLE=$VITE_APP_TITLE
ENV VITE_APP_LOGO=$VITE_APP_LOGO
ENV VITE_ANALYTICS_ENDPOINT=$VITE_ANALYTICS_ENDPOINT
ENV VITE_ANALYTICS_WEBSITE_ID=$VITE_ANALYTICS_WEBSITE_ID
ENV VITE_FRONTEND_FORGE_API_KEY=$VITE_FRONTEND_FORGE_API_KEY
ENV VITE_FRONTEND_FORGE_API_URL=$VITE_FRONTEND_FORGE_API_URL

# Build : Vite (frontend → dist/public) + esbuild (serveur → dist/index.js)
RUN pnpm build

# ── Stage production ──────────────────────────────────────────────────────────
FROM node:22-alpine AS production

WORKDIR /app

RUN npm install -g pnpm

# Copier les fichiers nécessaires
COPY package.json pnpm-lock.yaml ./
COPY patches/ ./patches/

# Installer toutes les dépendances (vite est requis au runtime par le serveur Express)
RUN pnpm install --frozen-lockfile

# Copier les artefacts de build
COPY --from=builder /app/dist ./dist

# Copier les fichiers de configuration et le seed
COPY drizzle.config.ts ./
COPY drizzle/ ./drizzle/
COPY seed-admin.mjs ./
COPY shared/ ./shared/
COPY server/ ./server/

EXPOSE 3000

# Démarrer le serveur et exécuter le seed admin
CMD node seed-admin.mjs && node dist/index.js
