# Etapa 1: Build de la app
FROM node:22.16.0-alpine AS builder

# Instalar dependencias de build necesarias para node-gyp
RUN apk add --no-cache python3 make g++

WORKDIR /app

# Copiar solo package files para caché
COPY package*.json ./
COPY tsconfig.json ./

# Instalar todas las dependencias (incluyendo devDependencies)
RUN npm ci --only=production=false

# Copiar código fuente
COPY . .

# Build del proyecto
RUN npm run build

# Limpiar caché de npm para reducir tamaño
RUN npm cache clean --force

# Etapa 2: Producción
FROM node:22.16.0-alpine AS production

# Crear usuario no-root para seguridad
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001

WORKDIR /app

# Copiar solo package files para instalación de producción
COPY package*.json ./

# Instalar solo dependencias de producción
RUN npm ci --only=production && npm cache clean --force

# Copiar el código compilado desde el builder con permisos correctos
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist

# Copiar plantillas de email a su ubicación original (las busca src/**)
COPY --from=builder --chown=nodejs:nodejs /app/src/contact-us/templates ./src/contact-us/templates

# Cambiar al usuario no-root
USER nodejs

EXPOSE 3000

CMD ["node", "dist/main"]