# Build stage
FROM --platform=${BUILDPLATFORM:-linux/amd64} node:20-bookworm-slim AS builder

ARG TARGETPLATFORM
ARG BUILDPLATFORM
ARG TARGETOS

ENV NVM_DIR /root/.nvm \
    DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get install -y \
    git curl build-essential python3 libssl-dev \
    lrzsz arj lhasa unrar-free p7zip-full dos2unix \
    && npm set progress=false && npm config set depth 0 \
    && npm install -g npm@latest pm2

WORKDIR /tmp

RUN git clone --depth 1 https://github.com/NuSkooler/enigma-bbs.git enigma-bbs-source \
    && cd enigma-bbs-source \
    && npm install --ignore-scripts \
    && dos2unix docker/bin/docker-entrypoint.sh \
    && dos2unix autoexec.sh

# Runtime stage
FROM node:20-bookworm-slim

ARG TARGETPLATFORM
ARG BUILDPLATFORM
ARG TARGETOS

LABEL maintainer="dave@force9.org"

ENV NVM_DIR=/root/.nvm \
    DEBIAN_FRONTEND=noninteractive \
    PATH=/root/.npm-global/bin:/usr/local/bin:/usr/bin:/bin \
    BBS_ROOT_DIR=/enigma-bbs \
    BBS_STAGING_PATH=/enigma-bbs-pre

RUN apt-get update && apt-get install -y \
    git curl \
    lrzsz arj lhasa unrar-free p7zip-full \
    && apt-get remove dos2unix -y \
    && apt-get autoremove -y \
    && npm set progress=false \
    && npm install -g pm2 \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

WORKDIR /${BBS_ROOT_DIR}

COPY --from=builder /tmp/enigma-bbs-source/ ${BBS_ROOT_DIR}/
COPY --from=builder /usr/local/bin/sexyz /usr/local/bin/

RUN dos2unix ${BBS_ROOT_DIR}/docker/bin/docker-entrypoint.sh \
    && cp -f ${BBS_ROOT_DIR}/docker/bin/sexyz /usr/local/bin \
    && mkdir -p ${BBS_STAGING_PATH}/art \
    && mkdir -p ${BBS_STAGING_PATH}/mods \
    && mkdir -p ${BBS_STAGING_PATH}/config \
    && cp -rp ${BBS_ROOT_DIR}/art/* ${BBS_STAGING_PATH}/art/ \
    && cp -rp ${BBS_ROOT_DIR}/mods/* ${BBS_STAGING_PATH}/mods/ \
    && cp -rp ${BBS_ROOT_DIR}/config/* ${BBS_STAGING_PATH}/config/ \
    && rm -rf ${BBS_ROOT_DIR}/art/* \
    && rm -rf ${BBS_ROOT_DIR}/mods/* \
    && rm -rf ${BBS_ROOT_DIR}/config \
    && ln -s ${BBS_STAGING_PATH}/config ${BBS_ROOT_DIR}/config \
    && pm2 start ${BBS_ROOT_DIR}/main.js \
    && rm -rf ${BBS_STAGING_PATH}/config

VOLUME ${BBS_ROOT_DIR}/art \
       ${BBS_ROOT_DIR}/config \
       ${BBS_ROOT_DIR}/db \
       ${BBS_ROOT_DIR}/filebase \
       ${BBS_ROOT_DIR}/logs \
       ${BBS_ROOT_DIR}/mods \
       /mail

EXPOSE 8888 44510 44511

WORKDIR ${BBS_ROOT_DIR}

ENTRYPOINT ["/enigma-bbs/docker/bin/docker-entrypoint.sh"]
