# Stage 1: Build
FROM node:22-alpine AS builder

WORKDIR /app

# Install dependencies with caching considerations
COPY package*.json ./
RUN npm config set fetch-retries 5 \
    && npm config set fetch-retry-factor 2 \
    && npm config set fetch-retry-mintimeout 20000 \
    && npm config set fetch-retry-maxtimeout 120000 \
    && npm config set fetch-timeout 300000 \
    && npm ci

# Copy source and build
COPY . .
RUN npm run build

# NOTA: el "npm prune --production" que antes vivia aca se movio al stage
# "production" de mas abajo. Este stage ("builder") ahora se queda CON las
# devDependencies a proposito -- "tools" (scripts one-off que necesitan
# ts-node) lo reusa tal cual. Si el prune se quedara aca, "tools" heredaria
# un node_modules ya podado y ts-node no existiria.

# Stage 2: Tools -- runner para backend/scripts/*.ts (ej. migrate-identidades.ts).
# NUNCA se despliega ni se construye como parte de un `docker compose up`
# normal -- solo se construye/corre explicitamente via
# `docker compose --profile tools run --rm backend-tools <script> [args]`
# (ver docker-compose.yml, servicio backend-tools). Point de entrada generico
# (npx ts-node) para que sirva para cualquier script nuevo que se agregue a
# backend/scripts/, no solo el de hoy.
FROM builder AS tools
ENV NODE_ENV=production
ENTRYPOINT ["npx", "ts-node"]

# Stage 3: Production
FROM node:22-alpine AS production

WORKDIR /app

RUN apk add --no-cache su-exec

# Set NODE_ENV to production
ENV NODE_ENV=production
ENV PORT=3001

# Copy only necessary files from builder
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/node_modules ./node_modules
# El prune vive AQUI (no en "builder"): asi "builder" (y por lo tanto
# "tools") se queda con las devDependencies completas, y solo la imagen que
# de verdad se despliega las pierde.
RUN npm prune --production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/plantillas ./plantillas
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh

# Create uploads directory and ensure correct permissions
RUN chmod +x /usr/local/bin/docker-entrypoint.sh \
    && mkdir -p /app/uploads/fotos/thumbnails /app/uploads/firmas /app/uploads/pdfs \
    && chown -R node:node /app

EXPOSE 3001

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["node", "dist/main.js"]
