# Простой Dockerfile для быстрой первой сборки
# Без многоступенчатой сборки - быстрее, но больше размер

FROM node:18-alpine

# Устанавливаем необходимые пакеты
RUN apk add --no-cache \
    libc6-compat \
    openssl

WORKDIR /app

# Копируем package.json и yarn.lock (если есть)
COPY nextjs_space/package.json ./
COPY nextjs_space/yarn.lock* ./

# Копируем prisma схему (нужна для генерации клиента)
COPY nextjs_space/prisma ./prisma

# Оптимизация: АГРЕССИВНО отключаем ВСЕ компиляции
ENV SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true
ENV CYPRESS_INSTALL_BINARY=0
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV NEXT_TELEMETRY_DISABLED=1
# Отключаем GYP компиляцию
ENV npm_config_build_from_source=false
ENV PYTHON=/usr/bin/python3
ENV npm_config_optional=false
# Отключаем компиляцию canvas, sharp и других
ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1
ENV CANVAS_SKIP_INSTALL=1

# Копируем остальные файлы (нужны для Prisma)
COPY nextjs_space/ ./

# РАДИКАЛЬНО: Устанавливаем ВСЕ (включая Prisma) с postinstall, 
# но с агрессивной оптимизацией
RUN yarn install --network-timeout 300000 --network-concurrency 4 && \
    echo "✅ Зависимости установлены"

# Генерируем Prisma Client (postinstall должен был запуститься автоматически)
RUN npx prisma generate --schema=./prisma/schema.prisma && \
    echo "✅ Prisma Client сгенерирован"

# Проверяем что клиент действительно создался
RUN echo "=== Проверка Prisma Client ===" && \
    test -d node_modules/.prisma/client && \
    test -f node_modules/.prisma/client/index.js && \
    ls -la node_modules/.prisma/client/ | head -10 && \
    echo "✅ Prisma Client файлы на месте"

# ВАЖНО: Повторная генерация перед сборкой (для уверенности)
RUN npx prisma generate --schema=./prisma/schema.prisma && \
    echo "✅ Prisma Client пересоздан перед сборкой"

# Переменные окружения для сборки
ARG NEXT_PUBLIC_SITE_URL
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL:-http://localhost:3000}
ENV NODE_ENV=production
ENV NEXT_PHASE=phase-production-build

# Собираем приложение
RUN yarn build

# В упрощенной версии оставляем все зависимости (включая dev)
# Это быстрее и безопаснее для первой сборки

# Создаем пользователя для безопасности
RUN addgroup --system --gid 1001 nodejs && \
    adduser --system --uid 1001 nextjs

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

USER nextjs

EXPOSE 3000

ENV PORT=3000
ENV HOSTNAME="0.0.0.0"

# Запускаем приложение
CMD ["yarn", "start"]
