# Dockerfile
FROM        086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:python311 AS base

ENV         PYTHONUNBUFFERED=1 \
            PYTHONDONTWRITEBYTECODE=1 \
            POETRY_HOME="/opt/poetry" \
            PYSETUP_PATH="/opt/pysetup" \
            POETRY_VIRTUALENVS_IN_PROJECT=1 \
            POETRY_VIRTUALENVS_CREATE=1 \
            VIRTUAL_ENV="/opt/pysetup/.venv"
ENV         PATH="$POETRY_HOME/bin:$VIRTUAL_ENV/bin:$PATH"

USER        root

RUN         apt-get -y update && \
            apt-get -y upgrade

# Install poetry
RUN         python -m venv $VIRTUAL_ENV && \
            $VIRTUAL_ENV/bin/pip install --no-cache --upgrade pip setuptools && \
            $VIRTUAL_ENV/bin/pip install --no-cache poetry~=2.3

RUN         useradd uwsgi -s /bin/false

USER        worker

WORKDIR     /var/app
COPY        pyproject.toml /var/app/

###########################
### Build image for dev ###
###########################
FROM        base AS dev

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

USER        root
RUN         apt-get -y install gcc && \
            poetry install --extras dev --no-root --no-cache && \
            apt-get purge -y gcc && \
            apt-get -y autoremove

USER        worker

WORKDIR     /var/app
COPY        vectororder ./vectororder
COPY        scripts ./scripts
COPY        application.py dev.py docker-compose.yml ./
EXPOSE      5000
CMD         ["poetry", "run", "ddtrace-run", "python", "dev.py", "2>&1"]


#################################
### Build image for unit-lint ###
#################################
FROM        dev AS unit-lint
ENV         RUFF_CACHE_DIR=/tmp/.ruff_cache

COPY        tests /var/app/tests
COPY        scripts/unit-lint.sh /var/app/scripts/

USER        worker
ENTRYPOINT  ["scripts/unit-lint.sh"]


##########################
### Format source code ###
##########################
FROM        dev AS format

COPY        tests /var/app/tests
COPY        scripts/format.sh /var/app/scripts/

USER        worker
ENTRYPOINT  ["scripts/format.sh"]

########################################
### Build image for integration-test ###
########################################
FROM        dev AS integration

COPY        tests /var/app/tests
COPY        scripts/integration.sh /var/app/scripts/

USER        worker
ENTRYPOINT  ["scripts/integration.sh"]


################################
### Generate poetry lockfile ###
################################
FROM        base AS update-lockfile

# Use root so the poetry.lock file can be rewritten inside of the container
USER        root
COPY        scripts/update-lockfile.sh ./scripts/
ENTRYPOINT  ["scripts/update-lockfile.sh"]


##############################
### Build image for deploy ###
##############################
FROM        base AS deploy

# Install requirements to PYSETUP_PATH
WORKDIR     $PYSETUP_PATH
COPY        pyproject.toml poetry.lock ./

USER        root

RUN         apt-get -y install gcc && \
            poetry install --only main --no-root --no-cache && \
            apt-get purge -y gcc && \
            apt-get -y autoremove

USER        worker

WORKDIR     /var/app
COPY        vectororder ./vectororder
COPY        application.py uwsgi-start.sh uwsgi.ini ./

EXPOSE      8080

ENTRYPOINT  ["./uwsgi-start.sh"]
