# ==============================
# Stage 1: Builder (Bun)
# ==============================
FROM oven/bun:1.3.6-debian AS builder

WORKDIR /app

RUN apt-get update && apt-get install -y --no-install-recommends \
    libc6 \
    git \
    openssl \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

COPY package.json bun.lockb* ./
COPY prisma ./prisma

ENV ONNXRUNTIME_NODE_INSTALL_CUDA=0
ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1
ENV NEXT_TELEMETRY_DISABLED=1

RUN bun install

COPY . .

# Gunakan .env jika ada, fallback ke .env.example.
# Untuk build dengan .env custom, hapus .env dari .dockerignore
# atau berikan via: docker build --secret id=env,src=.env (BuildKit)
RUN if [ -f .env ]; then \
        echo "INFO: Menggunakan .env"; \
    elif [ -f .env.example ]; then \
        cp .env.example .env; \
        echo "WARNING: .env tidak ditemukan, menggunakan .env.example (isi dengan nilai yang benar)"; \
    else \
        echo "WARNING: Tidak ada .env atau .env.example"; \
    fi

# Generate prisma client
RUN ./node_modules/.bin/prisma generate

# Build Next.js
RUN bun run build


# ==============================
# Stage 2: Runner (Bun)
# ==============================
FROM oven/bun:1.3.6-debian AS runner

WORKDIR /app

ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1

RUN apt-get update && apt-get install -y --no-install-recommends \
    openssl \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

RUN groupadd --system --gid 1001 nodejs \
    && useradd --system --uid 1001 --gid nodejs nextjs

COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/tsconfig.json ./tsconfig.json
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/src ./src

# Env vars runtime dikelola oleh Portainer (stack env / container env).
# Tidak perlu copy .env ke runner — image tetap bersih tanpa secrets.

RUN chown -R nextjs:nodejs /app

USER nextjs

EXPOSE 3000

ENV PORT=3000
ENV HOSTNAME="0.0.0.0"

CMD ["bun", "run", "start"]