FROM node:20-alpine AS base
RUN apk add --no-cache openssl openssl-dev && \
    corepack enable && corepack prepare pnpm@9.15.4 --activate
ENV PRISMA_QUERY_ENGINE_BINARY_TARGETS="linux-musl-arm64-openssl-3.0.x,linux-musl-openssl-3.0.x"
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 ["sh", "-c", "pnpm --filter @poly-weather/core exec prisma db push --schema=prisma/schema.prisma --accept-data-loss && node packages/trading-engine/dist/main.js"]

# --- Dashboard: build Next.js (all pages are force-dynamic, no DB needed at build) ---
FROM source AS dashboard-build
RUN pnpm --filter @poly-weather/core build && \
    pnpm --filter @poly-weather/dashboard build

# --- Dashboard runtime ---
FROM dashboard-build AS dashboard
ENV NODE_ENV=production
EXPOSE 3000
CMD ["pnpm", "--filter", "@poly-weather/dashboard", "start"]
