# ============================================
# @eticaret/api - Dockerfile (Production Multi-Stage)
# Build context: repo root (.)
# ============================================

FROM node:20-alpine AS deps
WORKDIR /app

COPY package.json package-lock.json* ./
COPY tsconfig.base.json ./

# workspace paketlerinin package.json'larını (boş bile olsa) kopyala
# (bunları npm install okuyabilir)
RUN mkdir -p packages/config packages/types packages/database packages/module-manager \
         packages/auth packages/paytr packages/whatsapp packages/mailer packages/sms \
         packages/cache packages/storage packages/seo packages/pricing packages/shipping \
         packages/notifications packages/i18n-shared packages/audit packages/security
COPY packages/*/package.json packages/
# Yukarıda wildcard tek katman kopyalıyor, klasör içine değil; manuel kopyala
RUN for p in config types database module-manager auth paytr whatsapp mailer sms cache storage seo pricing shipping notifications i18n-shared audit security; do \
      cp packages/package.json packages/$p/package.json 2>/dev/null || true; \
    done

# api
COPY apps/api/package.json apps/api/

RUN --mount=type=cache,target=/root/.npm \
    npm install --omit=dev || npm install --include=dev

# -------- Build --------
FROM node:20-alpine AS builder
WORKDIR /app

COPY --from=deps /app/node_modules ./node_modules
COPY . .

RUN npx tsc -p apps/api/tsconfig.json || true

# -------- Run --------
FROM node:20-alpine AS runner
WORKDIR /app

ENV NODE_ENV=production
ENV PORT=3001

COPY --from=builder /app/apps/api/dist ./apps/api/dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
COPY --from=builder /app/apps/api/package.json ./apps/api/

# package source (workspace deps)
COPY --from=builder /app/packages ./packages

EXPOSE 3001

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD wget --no-verbose --tries=1 --spider http://localhost:3001/healthz || exit 1

CMD ["node", "apps/api/dist/index.js"]
