# Dockerfile per Next.js con Worker Autonomo in un'unica immagine

# --- 1. Base Stage ---
# Usiamo un'immagine Node.js ufficiale basata su Alpine Linux per la sua leggerezza.
FROM node:20-alpine AS base
WORKDIR /app

# --- 2. Dependencies Stage ---
# Questo stage installa SOLO le dipendenze di produzione.
# Viene eseguito solo se package.json o package-lock.json cambiano, sfruttando la cache di Docker.
FROM base AS deps
WORKDIR /app

COPY package.json package-lock.json ./
RUN npm install --only=production

# --- 3. Builder Stage ---
# Questo stage installa le dipendenze di sviluppo e costruisce l'applicazione Next.js.
FROM base AS builder
WORKDIR /app

# Copia le dipendenze di produzione dallo stage 'deps'
COPY --from=deps /app/node_modules ./node_modules
# Copia package.json per installare le devDependencies
COPY package.json ./
RUN npm install --only=development

# Copia il resto dei file dell'applicazione
COPY . .
# Copia il file .env per rendere le variabili d'ambiente disponibili alla build
COPY .env .env

# Esegui la build. Ora avrà accesso alle variabili d'ambiente.
RUN npm run build

# --- 4. Runner Stage (Finale) ---
# Questo è lo stage finale che creerà l'immagine del container.
# Partiamo da un'immagine pulita per mantenere la dimensione ridotta.
FROM base AS runner
WORKDIR /app

# Imposta l'ambiente su 'production'
ENV NODE_ENV=production

# Copia le dipendenze di produzione dallo stage 'deps'
COPY --from=deps /app/node_modules ./node_modules
# Copia il package.json necessario per lo script 'start'
COPY --from=builder /app/package.json ./package.json

# Copia l'output della build di Next.js (.next)
COPY --from=builder /app/.next ./.next
# Copia i file pubblici
COPY --from=builder /app/public ./public
# Copia gli script del worker necessari per l'esecuzione
COPY --from=builder /app/scheduler-worker.js ./scheduler-worker.js
COPY --from=builder /app/src/lib/notification-logic.js ./src/lib/notification-logic.js

# La porta su cui Next.js verrà eseguito
EXPOSE 3000

# Il comando per avviare l'applicazione (server web + worker)
CMD ["npm", "start"]
