# Base Image: Ubuntu + Cuda
FROM nvidia/cuda:11.0.3-devel-ubuntu20.04 AS python_base_cuda

# ENV SET    
ENV PYTHONUNBUFFERED=1 \
  PYTHONFAULTHANDLER=1 \
  PYTHONHASHSEED=random \
  PYTHONDONTWRITEBYTECODE=1 \
  PIP_NO_CACHE_DIR=off \
  PIP_DISABLE_PIP_VERSION_CHECK=on \
  PIP_DEFAULT_TIMEOUT=100 \
  POETRY_NO_INTERACTION=1 \
  POETRY_HOME="/opt/poetry" \ 
  PYSETUP_PATH="/opt/pysetup" \
  VENV_PATH="/opt/pysetup/.venv" \
  POETRY_VERSION=1.2.0 \
  POETRY_VIRTUALENVS_IN_PROJECT=true \
  POETRY_NO_INTERACTION=1 

# prepend poetry and venv to path
ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH"

FROM python_base_cuda AS builder-base
# Update system and install wget
RUN apt-get update && \
    DEBIAN_FRONTEND="noninteractive" apt-get -yq install --no-install-recommends -y \
        wget=1.20.3-1ubuntu2 \
        ffmpeg=7:4.2.7-0ubuntu0.1 \
        libpython3.8=3.8.10-0ubuntu1~20.04.5 \
        git=1:2.25.1-1ubuntu3.5 \
        sudo=1.8.31-1ubuntu1.2 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install dependencies
RUN apt-get update && apt-get install -y \
    software-properties-common \
    curl \
    python3.8 \
    python3-pip

# System deps:
RUN curl -sSL https://install.python-poetry.org | python3 - --version $POETRY_VERSION

WORKDIR $PYSETUP_PATH
COPY poetry.lock pyproject.toml ./

# Project initialization
RUN poetry install --only main --no-root --no-ansi

FROM python_base_cuda AS development
ENV ANOMALY_ENV=development
WORKDIR $PYSETUP_PATH

RUN apt-get update && \
    DEBIAN_FRONTEND="noninteractive" apt-get -yq install --no-install-recommends -y \
        wget=1.20.3-1ubuntu2 \
        ffmpeg=7:4.2.7-0ubuntu0.1 \
        libpython3.8=3.8.10-0ubuntu1~20.04.5 \
        git=1:2.25.1-1ubuntu3.5 \
        sudo=1.8.31-1ubuntu1.2 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install dependencies
RUN apt-get update && apt-get install -y \
    software-properties-common \
    curl \
    python3.8 \
    python3-pip

# copy in our built poetry + venv
COPY --from=builder-base $POETRY_HOME $POETRY_HOME
COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH

# quicker install as runtime deps are already installed
RUN poetry install

# Moving working files to docker file system.
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./