# Build context: repo root
FROM node:20-alpine AS build
WORKDIR /workspace

# Copy all workspace manifests + root lock file (for layer caching)
COPY package.json package-lock.json ./
COPY packages/shared/package.json   ./packages/shared/
COPY apps/api/package.json          ./apps/api/
COPY apps/frontend/package.json     ./apps/frontend/
COPY services/whatsapp/package.json ./services/whatsapp/

# Install all workspace deps (hoisted to /workspace/node_modules)
RUN npm ci

# Copy source and build (@wa-ticketing/shared must be compiled .js for Node runtime)
COPY packages/shared/tsconfig.json ./packages/shared/
COPY packages/shared/src ./packages/shared/src
RUN npm run build --workspace=@wa-ticketing/shared

COPY apps/api/src            ./apps/api/src
COPY apps/api/tsconfig.json  ./apps/api/

WORKDIR /workspace/apps/api
RUN npm run build

# ── Runtime ──────────────────────────────────────────────
FROM node:20-alpine AS runtime
WORKDIR /workspace

# node_modules are hoisted; @wa-ticketing/shared symlink points to packages/shared
COPY --from=build /workspace/node_modules  ./node_modules
COPY --from=build /workspace/packages      ./packages
COPY --from=build /workspace/apps/api/dist ./apps/api/dist
COPY --from=build /workspace/apps/api/package.json ./apps/api/

WORKDIR /workspace/apps/api
EXPOSE 3001
# Seed (idempotent) then start
CMD ["sh", "-c", "node dist/seed.js && node dist/index.js"]
