# syntax=docker/dockerfile:1

ARG UBUNTU_VERSION=26.04
FROM ubuntu:${UBUNTU_VERSION}

ARG NODE_VERSION=24.21.0

ARG DEV_UID=1000
ARG DEV_GID=1000

# Move the pre-existing ubuntu user/group away from 1000:1000
RUN groupmod --gid 1234 ubuntu \
    && usermod --uid 1234 --gid 1234 ubuntu

ENV DEBIAN_FRONTEND=noninteractive
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# System packages
RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get install -y --no-install-recommends \
        bash \
        ca-certificates \
        curl \
        wget \
        git \
        openssh-client \
        neovim \
        jq \
        less \
        zip \
        unzip \
        tar \
        gzip \
        procps \
        ripgrep \
        fd-find \
        tree \
        build-essential \
        pkg-config \
        python3 \
        python3-pip \
        python3-venv \
        python3-dev \
        openjdk-11-jdk \
        openjdk-17-jdk \
        maven \
        locales \
        xz-utils \
        file \
        util-linux \
    && update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java \
    && update-alternatives --set javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac \
    # && rm -rf /var/lib/apt/lists/*
    && echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen \
    && echo 'root:admin' | chpasswd \
    && locale-gen

# Runtime user
RUN groupadd --gid "${DEV_GID}" dev \
    && useradd \
        --uid "${DEV_UID}" \
        --gid "${DEV_GID}" \
        --create-home \
        --shell /bin/bash \
        dev

# Node.js + OpenCode
RUN curl -fsSLO \
        "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz" \
    && tar -xJf \
        "node-v${NODE_VERSION}-linux-x64.tar.xz" \
        -C /usr/local \
        --strip-components=1 \
    && rm "node-v${NODE_VERSION}-linux-x64.tar.xz" \
    && echo -n "node version: " && node --version \
    && echo -n "npm version: " && npm --version \
    && npm install -g @opencode/cli \
    && echo -n "opencode version: " && opencode --version \
    && npm install -g graphifyy \
    && npm install-scripts approve --all \
    && npm cache clean --force

# User directories
RUN mkdir -p \
        /workspace \
        /home/dev/.config/opencode \
        /home/dev/.local/share/opencode \
        /home/dev/.cache/opencode \
        /home/dev/.cache/pip \
        /home/dev/.npm \
        /home/dev/.m2 \
    && chown -R dev:dev \
        /workspace \
        /home/dev

RUN printf '%s\n' 'shopt -s dotglob' >> /etc/bash.bashrc

# Runtime
USER dev

ENV HOME=/home/dev \
    EDITOR=nvim \
    VISUAL=nvim \
    PIP_CACHE_DIR=/home/dev/.cache/pip \
    NPM_CONFIG_CACHE=/home/dev/.npm

RUN echo 'for f in /host-bash/*; do [ -r "$f" ] && source "$f"; done' >> ~/.bashrc

WORKDIR /workspace

ENTRYPOINT ["/usr/local/bin/opencode-dev-entrypoint"]

CMD ["bash"]
