# ============================================================================
# Dockerfile produksi — Next.js 14 + Prisma
# Multi-stage: deps -> builder -> runner. Node modules lengkap dibawa ke runner
# agar Prisma CLI (migrate deploy) & query engine pasti tersedia saat runtime.
# ----------------------------------------------------------------------------
# Build & jalankan (SQLite, database tersimpan di volume):
#   docker build -t telur .
#   docker run -p 3000:3000 -e JWT_SECRET=rahasia-acak-panjang \
#     -e DATABASE_URL="file:/data/prod.db" -v telur-db:/data telur
# Atau pakai docker-compose.yml (lebih mudah):  docker compose up -d --build
# ============================================================================

FROM node:20-slim AS base
# openssl dibutuhkan Prisma. tini untuk penanganan sinyal yang bersih.
RUN apt-get update -y && apt-get install -y openssl tini && rm -rf /var/lib/apt/lists/*
WORKDIR /app

# --- deps: pasang seluruh dependency (termasuk dev, dibutuhkan saat build) ---
FROM base AS deps
COPY package.json package-lock.json ./
RUN npm ci

# --- builder: generate Prisma client + build Next.js ------------------------
FROM base AS builder
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npx prisma generate && npm run build

# --- runner: image akhir yang dijalankan ------------------------------------
FROM base AS runner
ENV NODE_ENV=production
ENV PORT=3000
# Bawa hasil build + node_modules (berisi Prisma CLI & client) + berkas Prisma.
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/next.config.js ./next.config.js
COPY --from=builder /app/prisma ./prisma
COPY docker-entrypoint.sh ./
RUN chmod +x docker-entrypoint.sh

EXPOSE 3000
# tini sebagai init; entrypoint menerapkan migrasi lalu menjalankan CMD.
ENTRYPOINT ["/usr/bin/tini", "--", "./docker-entrypoint.sh"]
CMD ["npm", "run", "start"]
