# Stage 0: install and prepare TinyTex
FROM debian:bookworm-slim AS tex-builder

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

RUN wget -qO- https://yihui.org/tinytex/TinyTeX-0.tar.gz | tar -xz -C /tmp/

RUN /tmp/.TinyTeX/bin/x86_64-linux/tlmgr install \
	latex-bin \
	pdftex \
	geometry \
	pgf \
	etoolbox \
	csvsimple \
	csquotes \
	tools \
	ec \
	cm-super

# App starts here
FROM oven/bun:slim AS base
WORKDIR /usr/src/app

ENV NODE_ENV=production

ENV APP_USER_DATA_PATH="/app-data/user-data"
ENV APP_TMP_USER_DATA_PATH="/app-data/tmp"

## Stage 1: Install dependencies
FROM base AS install

# install development dependencies
RUN mkdir -p /temp/dev
COPY package.json bun.lockb /temp/dev/
RUN cd /temp/dev && bun install --frozen-lockfile

# install production dependencies
RUN mkdir -p /temp/prod
COPY package.json bun.lockb /temp/prod/
RUN cd /temp/prod && bun install --frozen-lockfile --production


## Stage 2: Build app
FROM base AS prerelease

# copy dependencies into workdir
COPY --from=install /temp/dev/node_modules node_modules

# add project files
COPY . .

# build project
RUN bun run build

## Stage 3: Put everything together
FROM base AS release

# compose the final image
COPY --from=tex-builder /tmp/.TinyTeX .TinyTeX
COPY --from=install /temp/prod/node_modules node_modules
COPY --from=prerelease /usr/src/app/build .
COPY --from=prerelease /usr/src/app/templates ./templates

ENV PATH="/usr/src/app/.TinyTeX/bin/x86_64-linux:${PATH}"

RUN mkdir /app-data && chown bun:bun /app-data
RUN chown -R bun:bun .TinyTeX

VOLUME ["/app-data"]

USER bun
EXPOSE 3000/tcp
ENTRYPOINT [ "bun", "--bun", "./index.js" ]

