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

FROM base AS deps
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./
COPY packages/shared/package.json packages/shared/
COPY packages/server/package.json packages/server/
COPY prisma/ prisma/
RUN pnpm install --frozen-lockfile

FROM base AS build
COPY --from=deps /app/ ./
COPY packages/shared/ packages/shared/
COPY packages/server/ packages/server/
COPY prisma/ prisma/
COPY tsconfig.base.json ./
RUN npx prisma generate --schema=prisma/schema.prisma
RUN pnpm --filter @agent-fox/shared build
RUN pnpm --filter @agent-fox/server build

FROM node:20-alpine AS runtime
WORKDIR /app
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/packages/shared/dist ./packages/shared/dist
COPY --from=build /app/packages/shared/node_modules ./packages/shared/node_modules
COPY --from=build /app/packages/shared/package.json ./packages/shared/
COPY --from=build /app/packages/server/dist ./packages/server/dist
COPY --from=build /app/packages/server/node_modules ./packages/server/node_modules
COPY --from=build /app/packages/server/package.json ./packages/server/
COPY --from=build /app/prisma ./prisma
COPY scripts/migrate-and-start.sh ./scripts/

RUN chmod +x scripts/migrate-and-start.sh
RUN npm install -g prisma@6

EXPOSE 3000
CMD ["sh", "scripts/migrate-and-start.sh"]
