# Используем Alpine версию Node.js для минимального размера
FROM node:20-alpine AS build

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем только package.json и package-lock.json для кэширования зависимостей
COPY package*.json ./

# Устанавливаем только production зависимости
RUN npm ci --only=production && npm cache clean --force

# Базовые утилиты для сборки (убрал минификацию для стабильности)
# RUN npm install -g terser html-minifier-terser clean-css-cli

# Копируем остальные файлы
COPY . .

# Удаляем системные файлы macOS
RUN find . -name "._*" -delete || true

# Финальный stage - только runtime
FROM node:20-alpine AS production

# Создаем пользователя для безопасности
RUN addgroup -g 1001 -S nodejs && adduser -S nodeuser -u 1001

WORKDIR /app

# Копируем зависимости из build stage
COPY --from=build /app/node_modules ./node_modules

# Копируем приложение
COPY --from=build /app/server.js ./
COPY --from=build /app/package.json ./
COPY --from=build /app/public ./public
COPY --from=build /app/database ./database

# Меняем владельца файлов
RUN chown -R nodeuser:nodejs /app

USER nodeuser

# Открываем порт
EXPOSE 3000

# Добавляем health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD node -e "require('http').get('http://localhost:3000/health', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })"

# Запускаем приложение
CMD ["node", "server.js"]