# Dockerfile
FROM python:3.11-slim

# Ajouter le dépôt Debian Testing pour les paquets plus récents
RUN echo "deb http://deb.debian.org/debian testing main" \
    > /etc/apt/sources.list.d/testing.list

WORKDIR /app

# Installer les outils de développement Go et Rust
RUN apt-get update && \
    apt-get install -y \
    clang \
    llvm-dev \
    libclang-dev \
    pkg-config \
    build-essential \
    git \
    make \
    curl \
    nodejs \
    npm \
    pylint \
    black \
    flake8 \
    mypy \
    isort \
    logrotate \
    sudo \
    cmake \
    libicu-dev \
    zlib1g-dev \
    libcurl4-openssl-dev \
    libssl-dev \
    ruby-dev \
    jq

COPY tools tools

# Création d'un utilisateur programmeur avec UID 1000 et home dans /home/programmer
RUN useradd -u 1000 -m -d /home/programmer -s /bin/bash programmer && \
    echo "programmer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/programmer

# Installer la dernière version de Go
RUN bash tools/install_latest_go.sh && \
    echo "PATH=/usr/local/go/bin:$PATH" >> /root/.bashrc
ENV PATH=/usr/local/go/bin:$PATH

# Installer la dernière version de Rust
ENV RUSTUP_HOME=/usr/local/rustup
ENV CARGO_HOME=/usr/local/cargo
ENV PATH=/usr/local/cargo/bin:$PATH
RUN curl https://sh.rustup.rs -sSf \
    | sh -s -- -y --default-toolchain stable \
    && rustup install nightly \
    && rustup component add rustfmt clippy rust-src rust-docs \
    && cargo install cargo-edit cargo-watch cargo-outdated cargo-make cargo-binstall

# Installer la dernière version de typscript
RUN npm install -g typescript tsc @types/node eslint prettier

RUN cargo binstall --strategies crate-meta-data jj-cli

RUN gem install github-linguist

# Installer le SDK MCP Python
RUN pip install --no-cache-dir ruff fastmcp ipython

RUN curl -fsSL https://opencode.ai/install | bash \
    && mv /root/.opencode/bin/opencode /usr/local/bin/

# Copier le serveur
COPY src .

# Copier le script de démarrage
COPY docker_startup.sh .
COPY opencode.json ~/.config/opencode

# Exposer le port
EXPOSE 7860
ENV OLLAMA_ADDR="http://host.docker.internal:11434"

# Rendre le script exécutable et lancer le serveur
RUN chmod +x docker_startup.sh
RUN mkdir /sandbox /log \
    && chown programmer:programmer /sandbox /log

# Création de la configuration logrotate
COPY logrotate-config /etc/logrotate.d/mcp-logs

# Changer l'utilisateur pour programmeur
USER programmer
RUN  mkdir -p /home/programmer/.config/opencode
COPY opencode.json /home/programmer/.config/opencode
CMD ["./docker_startup.sh"]
