# Dockerfile

ARG         AWS_ACCOUNT=086679231553
FROM        ${AWS_ACCOUNT}.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:python313 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

# Update and install common packages
RUN         apt-get -y update
RUN         apt-get -y install gcc

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

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


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

# httpretty install complains about some unicode error without this
ENV         LC_ALL=en_US.utf-8
ENV         LC_CTYPE=en_US.UTF-8

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

USER        root
RUN         poetry install --no-root --no-cache
USER        worker

# change to the app dir.
WORKDIR     /var/app
COPY        . /var/app

EXPOSE      5000
USER        worker
CMD         ["poetry", "run", "ddtrace-run", "python", "dev.py", "2>&1"]


#################################
### Build image for unit-lint ###
#################################
FROM        dev AS unit-lint

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


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

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

USER        root
RUN         poetry install --only integration --no-root --no-cache
USER        worker

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

ENTRYPOINT  ["scripts/integration.sh"]


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

USER        root

# Setup UWSGI
RUN         useradd uwsgi -s /bin/false
# Install requirements to PYSETUP_PATH
WORKDIR     $PYSETUP_PATH
COPY        pyproject.toml poetry.lock ./

RUN         poetry install --only main --no-root --no-cache

WORKDIR     /var/app
COPY        project_manager /var/app/project_manager
COPY        doc /var/app/doc
COPY        application.py /var/app/application.py
ADD         uwsgi-start.sh /var/app/
ADD         uwsgi.ini /var/app/

EXPOSE      8080
USER        worker
ENTRYPOINT  ["./uwsgi-start.sh"]

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"]
