# base
# ----
FROM node:24-bookworm-slim as base

RUN npm install --global corepack

RUN apt-get update && apt-get install -y \
  openssl \
  && rm -rf /var/lib/apt/lists/*

USER node
WORKDIR /home/node/app

COPY --chown=node:node package.json .
COPY --chown=node:node pnpm-lock.yaml .
COPY --chown=node:node pnpm-workspace.yaml .
COPY --chown=node:node api/package.json api/
COPY --chown=node:node web/package.json web/

RUN --mount=type=cache,id=pnpm,target=/home/node/.pnpm/store,uid=1000 \
  pnpm install --frozen-lockfile --store-dir /home/node/.pnpm/store

COPY --chown=node:node cedar.toml* redwood.toml* ./
COPY --chown=node:node graphql.config.cjs .
COPY --chown=node:node .env.defaults .env.defaults

# api build
# ---------
FROM base as api_build

COPY --chown=node:node api api
RUN pnpm exec cedar build api

# web prerender build
# -------------------
FROM api_build as web_build_with_prerender

COPY --chown=node:node web web
RUN pnpm exec cedar build web

# web build
# ---------
FROM base as web_build

COPY --chown=node:node web web
RUN pnpm exec cedar build web --no-prerender

# deploy
# ------
FROM api_build as deploy

COPY --chown=node:node --from=web_build /home/node/app/web/dist /home/node/app/web/dist

RUN pnpm deploy --filter=api --prod /home/node/app/dist/api
RUN pnpm deploy --filter=web --prod /home/node/app/dist/web

# api serve
# ---------
FROM node:24-bookworm-slim as api_serve

RUN npm install --global corepack

RUN apt-get update && apt-get install -y \
  openssl \
  && rm -rf /var/lib/apt/lists/*

USER node
WORKDIR /home/node/app

COPY --chown=node:node cedar.toml* redwood.toml* ./
COPY --chown=node:node graphql.config.cjs .
COPY --chown=node:node .env.defaults .env.defaults

COPY --chown=node:node --from=deploy /home/node/app/dist/api /home/node/app

COPY --chown=node:node --from=api_build /home/node/app/api/dist /home/node/app/api/dist
COPY --chown=node:node --from=api_build /home/node/app/api/db /home/node/app/api/db
COPY --chown=node:node --from=api_build /home/node/app/node_modules/.prisma /home/node/app/node_modules/.prisma

ENV NODE_ENV=production

CMD ["node_modules/.bin/cedarjs-server", "api"]

# web serve
# ---------
FROM node:24-bookworm-slim as web_serve

RUN npm install --global corepack

USER node
WORKDIR /home/node/app

COPY --chown=node:node cedar.toml* redwood.toml* ./
COPY --chown=node:node graphql.config.cjs .
COPY --chown=node:node .env.defaults .env.defaults

COPY --chown=node:node --from=deploy /home/node/app/dist/web /home/node/app

COPY --chown=node:node --from=web_build /home/node/app/web/dist /home/node/app/web/dist

ENV NODE_ENV=production \
  API_PROXY_TARGET=http://api:8911

CMD node_modules/.bin/cedar-web-server --api-proxy-target $API_PROXY_TARGET

# console
# -------
FROM base as console

COPY --chown=node:node api api
COPY --chown=node:node web web
COPY --chown=node:node scripts scripts
