# Use NVIDIA CUDA as the base for GPU support
FROM nvidia/cuda:12.4.1-runtime-ubuntu22.04

# Set non-interactive for apt
ENV DEBIAN_FRONTEND=noninteractive

# 1. Install System Dependencies
RUN apt-get update && apt-get install -y \
    wget \
    curl \
    python3 \
    python3-pip \
    python3-venv \
    git \
    build-essential \
    zlib1g-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    xvfb \
    libgl1-mesa-glx \
    libgl1-mesa-dri \
    libglfw3 \
    libxrandr2 \
    libxinerama1 \
    libxcursor1 \
    libxi6 \
    && rm -rf /var/lib/apt/lists/*

# 2. Install Julia 1.11.3
RUN curl -fsSL https://julialang-s3.julialang.org/bin/linux/x64/1.11/julia-1.11.3-linux-x86_64.tar.gz | tar -xz -C /usr/local --strip-components=1

# 3. Setup Working Directory
WORKDIR /app

# 4. Integrate JuliaMSI Framework
COPY JuliaMSI /opt/JuliaMSI
WORKDIR /opt/JuliaMSI

ENV DISPLAY=:99

# Instantiate framework package 
RUN xvfb-run -s "-screen 0 1024x768x24" julia --project=. -e 'using Pkg; Pkg.instantiate(); Pkg.precompile()'

# 5. Setup Project Root and Environments
WORKDIR /app
COPY environment/ /app/environment/

# Isolate Python dependencies for cleaner caching layers
RUN pip3 install --no-cache-dir -r environment/requirements.txt

# Force Julia 1.11.3 to resolve environments natively using your fixed UUID entries
RUN julia --project=environment -e 'using Pkg; Pkg.resolve(); Pkg.instantiate()'

# Register JuliaMSI explicitly into the runtime environment project
RUN julia --project=environment -e 'using Pkg; Pkg.develop(path="/opt/JuliaMSI")'

# 6. Copy Application Files
COPY . /app

# 7. Final Configuration
ENV JULIA_LOAD_PATH="/opt/JuliaMSI:/opt/JuliaMSI/src:${JULIA_LOAD_PATH}"
ENV PYTHONPATH="/app/scripts_python:${PYTHONPATH}"
ENV DISPLAY=:99

LABEL maintainer="MSI Hybrid Workflow Team"
LABEL description="CUDA + Julia 1.11.3 + JuliaMSI Framework"

CMD ["/bin/bash"]