FROM node:20-alpine AS base
RUN corepack enable && corepack prepare pnpm@9.15.4 --activate
WORKDIR /app

# --- Install dependencies ---
FROM base AS deps
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
COPY packages/core/package.json packages/core/
COPY packages/weather-engine/package.json packages/weather-engine/
COPY packages/market-engine/package.json packages/market-engine/
COPY packages/strategy/package.json packages/strategy/
COPY packages/trading-engine/package.json packages/trading-engine/
COPY packages/dashboard/package.json packages/dashboard/
RUN pnpm install --frozen-lockfile

# --- Copy source and generate Prisma client ---
FROM deps AS source
COPY . .
RUN pnpm db:generate

# --- Bot: build TS packages (no DB needed) ---
FROM source AS bot-build
RUN pnpm --filter @poly-weather/core build && \
    pnpm --filter @poly-weather/weather-engine build && \
    pnpm --filter @poly-weather/market-engine build && \
    pnpm --filter @poly-weather/strategy build && \
    pnpm --filter @poly-weather/trading-engine build

# --- Bot runtime ---
FROM bot-build AS bot
ENV NODE_ENV=production
EXPOSE 3001
CMD ["node", "packages/trading-engine/dist/main.js"]

# --- Dashboard runtime (builds at startup since it needs DB access) ---
FROM source AS dashboard
ENV NODE_ENV=production
EXPOSE 3000
CMD ["sh", "-c", "pnpm --filter @poly-weather/core build && pnpm --filter @poly-weather/dashboard build && pnpm --filter @poly-weather/dashboard start"]
