FROM ubuntu:24.04
LABEL author="Task Venture Capital GmbH <hello@task.vc>"

WORKDIR /workspace
# important environment variables
ENV NODE_VERSION_LTS="24.13.0" NODE_VERSION_STABLE="24.13.0" NVM_DIR="/usr/local/nvm"

# Chromium paths for Puppeteer/Playwright compatibility
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
ENV CHROME_BIN=/usr/bin/chromium-browser

# Layer 1: Base system + dev tools
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \
    && apt-get update \
    && apt-get upgrade --no-install-recommends -y \
    && apt-get install -y -q --no-install-recommends \
        software-properties-common \
        apt-transport-https \
        build-essential \
        ca-certificates \
        gpg-agent \
        curl \
        git \
        openssl \
        python3 \
        rsync \
        ssh \
        wget \
        unzip \
        jq \
        iputils-ping \
        dnsutils \
        tini \
        gcc-aarch64-linux-gnu \
    && apt-get clean

# Layer 2: Chromium + Puppeteer/Playwright browser deps
RUN apt-get install -y -q --no-install-recommends \
        chromium-browser \
        libasound2t64 \
        libatk1.0-0 \
        libatk-bridge2.0-0 \
        libc6 \
        libcairo2 \
        libcups2 \
        libdbus-1-3 \
        libexpat1 \
        libfontconfig1 \
        libgbm1 \
        libgcc-s1 \
        libgdk-pixbuf2.0-0 \
        libglib2.0-0 \
        libgtk-3-0 \
        libnspr4 \
        libpango-1.0-0 \
        libpangocairo-1.0-0 \
        libstdc++6 \
        libx11-6 \
        libx11-xcb1 \
        libxcb1 \
        libxcomposite1 \
        libxcursor1 \
        libxdamage1 \
        libxext6 \
        libxfixes3 \
        libxi6 \
        libxrandr2 \
        libxrender1 \
        libxss1 \
        libxtst6 \
        fonts-liberation \
        libayatana-appindicator3-1 \
        libnss3 \
        lsb-release \
        xdg-utils \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Layer 3: MongoDB 8.0
RUN curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
        gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg \
    && echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" | \
        tee /etc/apt/sources.list.d/mongodb-org-8.0.list \
    && apt-get update \
    && apt-get install -y -q --no-install-recommends mongodb-org \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Install nvm with node and npm
RUN mkdir -p $NVM_DIR && curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# Make nvm available globally in all bash shells (interactive + non-interactive)
# IMPORTANT: Prepend to bashrc, before the "[ -z "$PS1" ] && return" line
RUN printf '%s\n%s\n%s\n\n%s\n' \
    'export NVM_DIR="/usr/local/nvm"' \
    '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' \
    '[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"' \
    "$(cat /etc/bash.bashrc)" > /etc/bash.bashrc

# Copy nvm wrapper scripts from support directory
COPY image_support_files/bash-with-nvm /usr/local/bin/bash-with-nvm
COPY image_support_files/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/bash-with-nvm /usr/local/bin/docker-entrypoint.sh

# Use wrapper for RUN commands to enable nvm
SHELL ["/usr/local/bin/bash-with-nvm"]

# Enable nvm for runtime bash commands (CI/CD workflows)
ENV BASH_ENV=/etc/bash.bashrc

# prepare pnpm
ENV PNPM_HOME="/root/.local/share/pnpm"
RUN mkdir -p ${PNPM_HOME}
ENV PATH="$PNPM_HOME/bin:$PATH"

# Now nvm is available directly without sourcing
RUN nvm install $NODE_VERSION_STABLE \
    && nvm alias default $NODE_VERSION_STABLE \
    && nvm use default \
    && curl -fsSL https://get.pnpm.io/install.sh | bash - \
    && pnpm -v \
    && pnpm config set unsafe-perm true

ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION_STABLE/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION_STABLE/bin:$PATH

# Install Bun
RUN curl -fsSL https://bun.sh/install | bash
ENV BUN_INSTALL="/root/.bun"
ENV PATH="$BUN_INSTALL/bin:$PATH"

# Install Deno
RUN curl -fsSL https://deno.land/install.sh | sh
ENV DENO_INSTALL="/root/.deno"
ENV PATH="$DENO_INSTALL/bin:$PATH"

# Install Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
    && . /root/.cargo/env \
    && rustup target add aarch64-unknown-linux-gnu
ENV PATH="/root/.cargo/bin:$PATH"

# Set entrypoint to make nvm available in all runtime contexts
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
CMD ["bash"]
