# syntax=docker/dockerfile:1.7-labs

# ---------------------------------------------------------------------------
# Stage 1: base - system dependencies shared by install and production
# ---------------------------------------------------------------------------
FROM oven/bun:1.3.10 AS base

ENV APP_HOME=/app \
  PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 \
  REMOTION_PUPPETEER_NO_SANDBOX=1 \
  NODE_ENV=production

WORKDIR ${APP_HOME}

RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
    --mount=type=cache,target=/var/lib/apt,sharing=locked \
    apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
    ca-certificates \
    ffmpeg \
    chromium \
    libglib2.0-0 \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libdrm2 \
    libxkbcommon0 \
    libgbm1 \
    fonts-noto-color-emoji \
    curl \
    && rm -rf /var/lib/apt/lists/*

# ---------------------------------------------------------------------------
# Stage 2: deps - install Bun dependencies without project code
# ---------------------------------------------------------------------------
FROM base AS deps
WORKDIR ${APP_HOME}
COPY package.json bun.lock ./
RUN NODE_ENV=development bun install --frozen-lockfile

# ---------------------------------------------------------------------------
# Stage 3: prod - production target used by compute deployments
# ---------------------------------------------------------------------------
FROM base AS prod
WORKDIR ${APP_HOME}

COPY --from=deps ${APP_HOME}/node_modules ./node_modules
COPY package.json bun.lock ./
COPY tsconfig.json remotion.config.ts ./
COPY public ./public
COPY src ./src
COPY server ./server

RUN mkdir -p out

# Reuse the existing bun:bun user (UID/GID 1000) from the base image
RUN chown -R bun:bun /app

USER bun

EXPOSE 8001

CMD ["bun", "run", "server"]

# Backward-compatible target for the existing local docker-compose.yml.
FROM prod AS runner
